Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Можно ZipArchive создать с параметром Encoding , который используется для декодирования имен и комментариев записей в ZIP-архиве. .NET 7 представила регрессию, в которой эта кодировка использовалась по умолчанию, при этом резервная страница кода системы по умолчанию (UTF8 в .NET Core) не была указана. Эта регрессия исправлена в .NET 9: если флаги бита общего назначения записи указывают на то, что UTF8 следует использовать, то это учитывается. Если флаг бита UTF8 не задан, используется кодирование, предоставленное пользователем (с существующей резервной версией на кодовую страницу по умолчанию системы, если не задано).)
Прежнее поведение
В .NET 7 и .NET 8, если ZipArchive экземпляр был создан с заданным entryNameEncoding пользователем параметром, этот кодирование всегда использовалось при декодировании имен и комментариев записей в ZIP-архиве.
entryNameEncoding использовался даже в том случае, если запись имела битовый набор для обозначения того, что его имя и комментарий были закодированы в UTF8.
Новое поведение
Начиная с .NET 9, когда имя и комментарий zip-архива декодируются, его флаг UTF8-бит учитывается. Предоставленный пользователем entryNameEncoding параметр используется только для декодировки имени записи и примечания, если этот битовый флаг не задан.
Представленные версии
.NET 9 RC 1
Тип критического изменения
Причина изменения
Это изменение исправляет регрессию в .NET 7 и .NET 8. Он также возвращает ZipArchive соответствие спецификации формата ZIP-файла, разделам 4.4.4 и приложению D.
Рекомендуемое действие
Если код передает кодировку конструктору ZipArchive, помните, что эта кодировка не учитывается во всех ситуациях. Он будет использоваться только в том случае, если бит UTF8 записи не задан.
Если вы используете ZipArchive для синтаксического анализа записей ZIP с именами, закодированными в формате, отличном от UTF8 (но которые имеют набор флагов UTF8), вы больше не сможете это сделать. Предыдущее поведение было ошибкой.
Затронутые 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)