Aug. 11th, 2022

henry_flower: A melancholy wolf (Default)

Вчора батько написав мені імейла з .zip файлом і питанням чому у нього на w10 імена файлів всередині архайву виглядають ієрогліфами.

Для багатьох це є щось нудно знайоме, але мені такого не присилали років 15. Я ніби поринувся ув 2004.

Формат zip ув індексі має спеціяльний біт, назвемо його uses_unicode, який == 1, якщо ім'я файлу закодовано ув utf8; якщо біт == 0, тоді мається на увазі кодування IBM Code Page 437 (так).

Хтось на Маку зробив .zip, де закодував імена файлів ув utf8, але біт uses_unicode не виставив:

Лайнаксові unzip(1) та file-roller такий варіянт розпізнають, але 10й віндюка--ні. Він чесно намагається, згідно зіповського спеку, деінкодити cp437.

Суто для лулзів, я створив файл 'толстоевский.txt' та запхнув його до 1.zip за допомогою віндюкового іксплорера (Send To → Compressed zip folder). Останній зробив хід конякою: заінкодив ім'я файлу ув cp866 (так), а біт uses_unicode не виставив.

Федорівський unzip зрозумів що коїться, але гноумівський file-roller ні, і марно намагався перекодувати cp437 до юнікодної локалі.

Загалом, найліпше себе поводить zip(1) на лайнаксі: інкодить ув utf8 та виставляє uses_unicode біт.

7-zip під віндюка робить дещо інше: uses_unicode == 0, ім'я файлу ув cp866, але додатково записує те саме ім'я файлу ув utf8 до опціонального extra field ув індексі з id 0x7075, що називається Info-ZIP Unicode Path.

Оригінальний файл--квінтесенція СНД:

__MACOSX/Рецензия смет докум/._~$сьмоdoc.doc
Рецензия смет докум/247_ДЦ_ДЦ_3.rtf

June 2025

M T W T F S S
      1
2345678
91011 12131415
16171819202122
23242526272829
30      

Expand Cut Tags

No cut tags