2012-07-16

Unzip i18n: избавляемся от кракозябр в архивах

На Хабре опубликовали блок-схему для распознавания кракозябр с исходниками схемы в zip-архиве. По иронии судьбы в первом комментарии засветился скриншот:

кракозябры после распаковки zip в *nix

Так выглядит кириллическое имя файла внутри zip'а, созданного в Windows и распакованного в линуксе.

Я сам неоднократно сталкивался с подобным проявлением нетерпимости в мире кодировок. Решил потратить пару минут на изучение вопроса в гугле.

На opennet'е хорошо разжевали суть проблемы:

Имена файлов в ZIP-архиве хранятся в кодировке DOS, соответствующей языку локали. В Windows эта кодировка может быть получена соответствующей функцией, а для прочих систем авторы Info-ZIP решили не возиться и схалтурили — сделали безальтернативное преобразование cp850 → cp1252.

Там же, в комментариях, указали ссылку на PPA с пропатченными пакетами zip, unzip и p7zip. Без промедлений побежал избавляться от кракозябр в Ubuntu, подключив репозиторий:

sudo add-apt-repository ppa:frol/zip-i18n
sudo aptitude update && sudo aptitude safe-upgrade

Как вы, наверняка, догадываетесь, наступило безоговорочное счастье. Да здравствует интернационализация братских народов!

i18n и l10n в картинке

9 комментариев:

  1. у мя для сих целей(и не только) в zshrc имеется фунция
    convmv-unzip() {
    convmv -f iso8859-1 -t cp850 -r --notest --nosmart $1
    convmv -f cp866 -t utf8 -r --notest --nosmart $1
    }

    ОтветитьУдалить
  2. Анонимный16.07.2012, 17:33

    Спасибо за ссылку на репозиторий с исправленными пакетами; не знал, что он существует. До сегодняшнего дня использовал для этого сценарии Nautilus'а (http://vkapas.livejournal.com/17988.html).

    ОтветитьУдалить
  3. С мест сообщают, что в генте чинится USE-флагом natspec и emerge'ированием замаскированных пакетов zip и unzip, http://www.gentoo.ru/node/21574

    ОтветитьУдалить
  4. @muhas
    Недавно пересел на ZSH. Всех прелестей пока ещё не вкусил, но дополнение по табу это пестня. Уже ради этого стоило переходить :-)

    @vkapas
    > Спасибо за ссылку на репозиторий с исправленными пакетами; не знал, что он существует.
    You are welcome! :-) Спасибо тому, кто собрал пакеты.

    @Andrew Kravchuk
    Спасибо за ссылку. Гентушники оценят.

    ОтветитьУдалить
  5. @Anton Yakutovich
    приведенная функция и в bash'е работает
    но $1 лучше на $@ заменить дабы не по одному файлу переименовывать.

    А вообще я очень рад что появился ещё один хороший человек использующий zsh

    ОтветитьУдалить
  6. Вспомнилась шутка в тему. Кто-то мне прислал, не помню:

    В: есть проблема с распаковкой архива, в котором имена файлов на иврите.
    О: а контент кошерный?!
    В: вот из-за этого кошерного контента и проблемы.

    Всегда называл файлы православной латинницей и не имел проблем.

    ОтветитьУдалить
  7. @virens
    Михаил, все конечно хорошо, вот только как быть с архивами, которые присылают тебе, тут обычно начинается шаманство с wine, вот правда теперь решение есть.

    ОтветитьУдалить
  8. Анонимный20.11.2012, 10:56

    Проблема с кодировкой бывают часто когда упаковывают файлы с русскими именами в zip стандартным упаковщиком Windows.
    Как правило, все имена в таких архивах выглядят как ????????? и не распаковываются стандартными средствами.
    Я обычно распаковываю такие файлы с помощью консольного unzip, задав кодировку имен файлов с помощью опции -O WIN-1251.

    ОтветитьУдалить
  9. Кракозябры из RAR архивов - http://softhelp.org.ua/?p=2256
    Кракозябры в ZIP-архивах - http://softhelp.org.ua/?p=2297

    ОтветитьУдалить