I nomi e i commenti ZipArchiveEntry rispettano il flag UTF8
È possibile creare un ZipArchive con un parametro Encoding, che viene usato per decodificare i nomi e i commenti delle voci nell'archivio ZIP. .NET 7 ha introdotto una regressione in cui questa codifica è stata usata per impostazione predefinita, con un fallback alla tabella codici predefinita del sistema (UTF8 in .NET Core) se non è stata specificata alcuna codifica. Questa regressione viene corretta in .NET 9: se i flag di bit per utilizzo generico della voce indicano che è necessario usare UTF8, che viene rispettato. Se il flag di bit UTF8 non è impostato, viene usata la codifica fornita dall'utente (con il fallback esistente nella tabella codici predefinita del sistema, se non ne viene specificato nessuno).
Comportamento precedente
In .NET 7 e .NET 8, se è stata creata un'istanza di ZipArchive
con un parametro specificato dall'utenteentryNameEncoding
, questa codifica è sempre stata usata durante la decodifica dei nomi e dei commenti delle voci nell'archivio ZIP. entryNameEncoding
è stato usato anche se la voce ha impostato il bit per indicare che il nome e il commento sono stati codificati in UTF8.
Nuovo comportamento
A partire da .NET 9, quando viene decodificato il nome e il commento di una voce di archivio ZIP, viene rispettato il flag di bit UTF8. Il parametro fornito dall'utente entryNameEncoding
viene usato solo per decodificare il nome e il commento della voce se questo flag di bit non è impostato.
Versione introdotta
.NET 9 RC 1
Tipo di modifica che causa un'interruzione
Questa è una modifica funzionale.
Motivo della modifica
Questa modifica corregge una regressione in .NET 7 e .NET 8. Restituisce inoltre ZipArchive per conformità con la specifica del formato di file ZIP, le sezioni 4.4.4 e l'appendice D.
Azione consigliata
Se il codice passa una codifica al Costruttore ZipArchive, tenere presente che questa codifica non viene rispettata in tutte le situazioni. Verrà usata solo se il bit UTF8 della voce non è impostato.
Se si usa ZipArchive per analizzare le voci ZIP con nomi codificati in formato non UTF8 (ma con il flag di bit UTF8 impostato), non sarà più possibile farlo. Il comportamento precedente era un bug.
API interessate
- 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)