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 комментариев: ответить

16.07.2012, 16:23   muhas комментирует...

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

16.07.2012, 17:33   Анонимный комментирует...

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

16.07.2012, 21:07   Unknown комментирует...

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

17.07.2012, 12:18   drakulavich комментирует...

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

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

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

19.07.2012, 08:34   muhas комментирует...

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

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

22.07.2012, 14:00   virens комментирует...

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

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

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

11.09.2012, 14:30   Iskander комментирует...

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

20.11.2012, 10:56   Анонимный комментирует...

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

04.12.2013, 12:38   synth2008 комментирует...

Кракозябры из RAR архивов - http://softhelp.org.ua/?p=2256
Кракозябры в ZIP-архивах - http://softhelp.org.ua/?p=2297

Отправить комментарий