Windows - Кириллица в именах файлов внутри архива ZIP

Материал из Кафедра ИУ5 МГТУ им. Н.Э.Баумана - студенческое сообщество
Перейти к: навигация, поиск

В статье рассказывается о том, как упаковывать файлы в ZIP-архив с кодировкой имён в UTF-8.

Описание проблемы

Иногда при открытии архивов ZIP в именах файлов написаны иероглифы. В основном, это случается при работе с архивами, упакованными в среде Windows, в других операционных системах, например Linux и Mac OS.

Вот как это выглядит:

Zip.bad.enc.png

Почему так

Такое получается из-за разных кодировок в разных операционных системах. А точнее из-за того, что Windows до сих пор использует свою WIN1251, когда давно уже существует UTF-8, созданная специально во избежание подобных проблем. ZIP, хоть и являясь старейшим и распространённейшим форматом архивов, испытывает проблемы с этим при переносе архива с платформы на платформу.

Не имеет значения, какую программу-архиватор вы используете - причина именно в самом формате ZIP. Для проверки мы упаковали тестовый архив с настройками по умолчанию сначала архиватором WinRAR, затем - архиватором 7-Zip. После чего просмотрели архивы в среде Mac OS - в обоих архивах кириллические имена файлов превратились в набор кракозябр.

Ну так может тогда не стоит использовать формат ZIP и паковать всё, например, в 7z? В общем-то, это хорошая идея, но дело в том (и это единственная причина), что ZIP, как уже говорилось, является наиболее распространённым форматом архивов, потому чтобы большинство ваших пользователей смогло распаковать ваш архив, использовать рекомендуется именно его.

Что делать

Нужно как-то принудительно указать архиватору, что при кодировке имён файлов он должен использовать UTF-8.

И у архиватора 7-Zip есть такая возможность. Формат команды следующий:

7z.exe a -tzip -mcu archname.zip file2pack.txt

Здесь:

7z.exe - имя исполняемого файла архиватора;
a - команда архивации;
-tzip - формат архива: ZIP;
-mcu - именно эти ключи указывают на кодировку UTF-8;
archname.zip - имя итогового файла архива;
file2pack.txt - файлы для упаковки.

После создание архива такой командой кириллица в именах файлов сохраняется на всех платформах, использующих UTF-8 (то есть, практически везде):

Zip.good.enc.png

Очередная медаль на грудь славного архиватора 7-Zip.

Как это автоматизировать

Понятное дело, что каждый раз лезть в командную строку и писать там команду архивации с необходимыми ключами очень сильно обламывает, ведь хочется, чтобы всё выполнялось в два клика мышью.

Как вариант, можно написать свою оболочку для 7z.exe или просто создать .bat-файл.

А можно воспользоваться приложением Open++ и добавить нужный пункт в контекстное меню Windows.