Nazwy i komentarze zipArchiveEntry szanują flagę UTF8
Element ZipArchive można utworzyć za pomocą parametru Encoding , który służy do dekodowania nazw i komentarzy wpisów w archiwum ZIP. Platforma .NET 7 wprowadziła regresję polegającą na tym, że to kodowanie było domyślnie używane z rezerwą do domyślnej strony kodowej systemu (UTF8 na platformie .NET Core), jeśli nie podano kodowania. Ta regresja jest poprawiana na platformie .NET 9: jeśli flagi bitów ogólnego przeznaczenia wpisu wskazują, że należy użyć utF8, to jest przestrzegane. Jeśli flaga bitowa UTF8 nie jest ustawiona, używane jest kodowanie dostarczone przez użytkownika (z istniejącym rezerwowym elementem domyślnym strony kodowej systemu, jeśli żadna z nich nie zostanie podana).
Poprzednie zachowanie
W programach .NET 7 i .NET 8, jeśli wystąpienie elementu ZipArchive
zostało utworzone za pomocą określonego przez użytkownika entryNameEncoding
parametru, to kodowanie było zawsze używane podczas dekodowania nazw i komentarzy wpisów w archiwum ZIP. entryNameEncoding
został użyty, nawet jeśli wpis miał bit ustawiony, aby oznaczać, że jego nazwa i komentarz zostały zakodowane w UTF8.
Nowe zachowanie
Począwszy od platformy .NET 9, gdy nazwa i komentarz archiwum ZIP są dekodowane, jego flaga bitowa UTF8 jest przestrzegana. Parametr dostarczony entryNameEncoding
przez użytkownika jest używany tylko do dekodowania nazwy wpisu i komentarza, jeśli ta flaga bitowa jest niezniestawiona.
Wprowadzona wersja
.NET 9 RC 1
Typ zmiany powodującej niezgodność
Ta zmiana jest zmianą behawioralną.
Przyczyna wprowadzenia zmiany
Ta zmiana poprawia regresję w programach .NET 7 i .NET 8. Zwraca ZipArchive również zgodność ze specyfikacją formatu pliku ZIP, sekcjami 4.4.4 i dodatkiem D.
Zalecana akcja
Jeśli kod przekazuje kodowanie do konstruktora ZipArchive, pamiętaj, że to kodowanie nie jest przestrzegane we wszystkich sytuacjach. Będzie on używany tylko wtedy, gdy nie ustawiono bitu UTF8 wpisu.
Jeśli używasz ZipArchive funkcji do analizowania wpisów ZIP z nazwami zakodowanymi w formacie innym niż UTF8 (ale które mają ustawioną flagę bitową UTF8), nie będzie już można tego zrobić. Poprzednie zachowanie było usterką.
Dotyczy interfejsów API
- 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)