Udostępnij za pośrednictwem


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.

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