Los nombres y comentarios de ZipArchiveEntry respetan la flag UTF8
Se puede crear ZipArchive con un parámetro Encoding, que se usa para descodificar los nombres y comentarios de entradas en el archivo ZIP. Con .NET 7 se incorporó una regresión en la que esta codificación se usaba de forma predeterminada, con un sistema de recuperación de la página de código predeterminada del sistema (UTF8 en .NET Core) si no se ha utilizado ninguna codificación. Esta regresión ya está resuelta en .NET 9: si las flags de bits de uso general de la entrada indican que se debe usar UTF8, se respeta. Si no se crea la flag de bits UTF8, se usa la codificación facilitada por el usuario (con el sistema de recuperación de la página de código predeterminada del sistema si no hay ninguna disponible).
Qué pasaba antes
En .NET 7 y .NET 8, si se creaba una instancia de ZipArchive
con un parámetro entryNameEncoding
especificado por el usuario, esta codificación siempre se usaba al descodificar los nombres y comentarios de entradas en el archivo ZIP. Se usaba incluso entryNameEncoding
si la entrada tiene el bit creado para indicar que el nombre y comentario usaban codificación UTF8.
Nuevo funcionamiento
A partir de .NET 9, cuando se descodifica el nombre y el comentario de una entrada del archivo ZIP, se respeta la flag de bits UTF8. El parámetro entryNameEncoding
facilitado por el usuario solo se usaba para descodificar el nombre y el comentario de la entrada si esta flag de bits no estaba definida.
Versión introducida
.NET 9 RC 1
Tipo de cambio importante
Este es un cambio de funcionamiento.
Motivo del cambio
Este cambio corrige una regresión en .NET 7 y .NET 8. También devuelve ZipArchive para cumplir con la especificación de formato de archivos ZIP, secciones 4.4.4 y apéndice D.
Acción recomendada
Si el código pasa una codificación al constructor ZipArchive, tenga en cuenta que esta codificación no se respeta en todas las situaciones. Solo se usará si no se crea el bit de UTF8 de la entrada.
Si usa ZipArchive para analizar entradas ZIP con nombres codificados en formato que no sea UTF8 (pero está creada la flag de bits de UTF8), ya no podrá hacerlo. Lo que pasaba antes era un error.
API afectadas
- 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)