Partilhar via


ZipArchiveNomes de entrada e comentários respeitam a bandeira UTF8

A ZipArchive pode ser criado com um Encoding parâmetro, que é usado para decodificar os nomes e comentários de entradas no arquivo ZIP. O .NET 7 introduziu uma regressão onde essa codificação era usada por padrão, com um fallback para a página de código padrão do sistema (UTF8 no .NET Core) se nenhuma codificação fosse fornecida. Essa regressão é corrigida no .NET 9: se os sinalizadores de bit de uso geral da entrada indicarem que UTF8 deve ser usado, isso será respeitado. Se o sinalizador de bits UTF8 não estiver definido, a codificação fornecida pelo usuário será usada (com o fallback existente para a página de código padrão do sistema, se nenhum for fornecido.)

Comportamento anterior

No .NET 7 e .NET 8, se um ZipArchive foi instanciado com um parâmetro especificado entryNameEncoding pelo usuário, essa codificação sempre foi usada ao decodificar os nomes e comentários de entradas no arquivo ZIP. entryNameEncoding foi usado mesmo que a entrada tivesse o bit definido para significar que seu nome e comentário foram codificados em UTF8.

Novo comportamento

A partir do .NET 9, quando o nome e o comentário de uma entrada de arquivo ZIP são decodificados, seu sinalizador de bits UTF8 é respeitado. O parâmetro fornecido pelo entryNameEncoding usuário só é usado para decodificar o nome da entrada e comentar se esse sinalizador de bit estiver desdefinido.

Versão introduzida

.NET 9 RC 1

Tipo de mudança de rutura

Esta mudança é uma mudança comportamental.

Razão para a alteração

Essa alteração corrige uma regressão no .NET 7 e .NET 8. Ele também retorna ZipArchive à conformidade com a especificação de formato de arquivo ZIP, seções 4.4.4 e apêndice D.

Se o seu código passar uma codificação para o construtor ZipArchive, esteja ciente de que essa codificação não é respeitada em todas as situações. Ele só será usado se o bit UTF8 da entrada não estiver definido.

Se você estiver usando ZipArchive para analisar entradas ZIP com nomes codificados em formato não-UTF8 (mas que têm o sinalizador de bit UTF8 definido), você não poderá mais fazê-lo. O comportamento anterior era um bug.

APIs afetadas