Les noms et commentaires de ZipArchiveEntry respectent l’indicateur UTF8
Un ZipArchive peut être créé avec un paramètre Encoding, qui est utilisé pour décoder les noms et les commentaires des entrées dans l’archive ZIP. .NET 7 a introduit une régression où ce codage était utilisé par défaut, avec un repli vers la page de code par défaut du système (UTF8 dans .NET Core) si aucun codage n’était fourni. Cette régression est corrigée dans .NET 9 : si les indicateurs de bits de l’entrée indiquent que l’UTF8 doit être utilisé, cela est respecté. Si l’indicateur de bits UTF8 n’est pas activé, le codage fourni par l’utilisateur est utilisé (avec le repli existant vers la page de code par défaut du système si aucun n’est fourni).
Comportement précédent
Dans .NET 7 et .NET 8, si un ZipArchive
était instancié avec un paramètre entryNameEncoding
spécifié par l’utilisateur, ce codage était toujours utilisé lors du décodage des noms et des commentaires des entrées dans l’archive ZIP. entryNameEncoding
était utilisé même si l’entrée avait le bit activé pour indiquer que son nom et son commentaire étaient encodés en UTF8.
Nouveau comportement
À partir de .NET 9, lorsque le nom et le commentaire d’une entrée ZIP sont décodés, l’indicateur de bit UTF8 est respecté. Le paramètre entryNameEncoding
fourni par l’utilisateur n’est utilisé pour décoder le nom et le commentaire de l’entrée que si cet indicateur de bits n’est pas activé.
Version introduite
.NET 9 RC 1
Type de changement cassant
Ce changement est un changement de comportement.
Raison du changement
Ce changement corrige une régression dans .NET 7 et .NET 8. Il remet également ZipArchive en conformité avec la spécification du format de fichier ZIP, sections 4.4.4 et annexe D.
Action recommandée
Si votre code transmet un encodage au constructeur ZipArchive, sachez que cet encodage n’est pas respecté dans toutes les situations. Il ne sera utilisé que si l’indicateur UTF8 de l’entrée n’est pas activé.
Si vous utilisez ZipArchive pour analyser des entrées ZIP avec des noms encodés dans un format non UTF8 (mais avec l’indicateur de bit UTF8 activé), vous ne pourrez plus le faire. Le comportement précédent était un bug.
API affectées
- ZipArchive(Stream, ZipArchiveMode, Boolean, Encoding)
- System.IO.Compression.ZipFile.ExtractToDirectory(Stream, String, Encoding, Boolean)
- System.IO.Compression.ZipFile.ExtractToDirectory(String, String, Encoding, Boolean)
- System.IO.Compression.ZipFile.ExtractToDirectory(String, String, Encoding)
- System.IO.Compression.ZipFile.ExtractToDirectory(Stream, String, Encoding)
- System.IO.Compression.ZipFile.Open(String, ZipArchiveMode, Encoding)