Compartilhar via


Os nomes e comentários de ZipArchiveEntry respeitam o sinalizador UTF8

O ZipArchive pode ser criado com um parâmetro Encoding, que é usado para decodificar os nomes e comentários das entradas no arquivo ZIP. O .NET 7 introduziu uma regressão em que essa codificação foi 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 o 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 nenhuma for fornecida).

Comportamento anterior

No .NET 7 e no .NET 8, se o ZipArchive fosse instanciado com um parâmetro entryNameEncoding especificado pelo usuário, essa codificação sempre era usada ao decodificar os nomes e comentários das 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 entryNameEncoding fornecido pelo usuário só é usado para decodificar o nome e o comentário da entrada se esse sinalizador de bit não estiver definido.

Versão introduzida

.NET 9 RC 1

Tipo de alteração interruptiva

Esta é uma alteração comportamental.

Motivo da alteração

Essa alteração corrige uma regressão no .NET 7 e no .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 código passar uma codificação para o construtor ZipArchive, lembre-se 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 no formato não UTF8 (mas que têm o sinalizador de bits UTF8 definido), você não poderá mais fazer isso. O comportamento anterior era um bug.

APIs afetadas