Правильно расшифровывать имена файлов zip-записей - CP437, UTF-8 или?

Недавно я написал библиотеку ввода-вывода zip-файла под названиемZipZap, но я'Я борюсь с правильным декодированием имен файлов zip-записей из произвольных zip-файлов.

ТеперьPKWARE spec состояния:

D.1 Формат ZIP исторически поддерживал только исходный набор кодировки символов IBM PC, обычно называемый IBM Code Page 437 ...

D.2 Если бит 11 общего назначения не установлен, имя файла и комментарий должны соответствовать исходной кодировке символов ZIP. Если установлен бит 11 общего назначения, имя файла и комментарий должны поддерживать стандарт Unicode, версия 4.1.0 или выше, используя форму кодировки символов, определенную спецификацией хранения UTF-8 ...

Это означает, что соответствующие zip-файлы кодируют имена файлов как CP437, если только не установлен бит EFS, и в этом случае имена файлов - UTF-8.

К сожалению, кажется, что многие почтовые инструменты неt правильно установить бит EFS (например, Mac CLI, zip с графическим интерфейсом) или использовать другую кодировку, обычно системную кодировку по умолчанию (например, WinZip?). Если вы знаете, как WinZip, 7-Zip, Info-Zip, PKZIP, Java JAR / Zip, .NET zip, dotnetzip и т. Д. Кодируют имена файлов и какие они задают их »версия сделана поле к когдапроноситься, скажи пожалуйста.

В частности, Info-Zip пытается это сделать, когдаразархивирования:

Файловая система = MS-DOS (0) => CP437кроме: версия = 2.5, 2.6, 4.0 => ISO 8859-1Файловая система = HPFS (6) => CP437Файловая система = NTFS (10) и версия = 5.0 => CP437в противном случае, ISO 8859-1

Если я хочу поддержать проверку или извлечение из произвольных ZIP-файлов и сделатьразумный попытка кодирования имени файла без флага EFS, что я могу искать?

Ответы на вопрос(2)

Ваш ответ на вопрос