среда, 18 мая 2016 г.

Centos 7, разархивировать архив с файлами по-русски

Дано: Centos 7, zip-архив созданный на Windows, внутри файлы с названием кириллицей, по-русски.
Требуется: разархивировать файл, так чтобы имена файлов читались в UTF-8

Последняя стабильная версия unzip от Info-zip была выпущена в 2009 году, и сейчас это 6.0.1.
В ней нет поддержки Unicode, совсем.
Это говорит о том, что все ваши русские файлы, которые zip хранит в кодировке CP866 будут разархивированы крокозяброй.

Что я делал?
Взял бубен и Google, неделя танцев и изысков.
Советуют 7zip - не получилось.
Далее Unar (не unrar, а именно unar)- это круто. Все работает, из коробки, все само конвертится в utf8. В общем, красота. Но под мои задачи не пошло, т.к. из php-fpm, командой exec('unar ....', $out); получаем один ответ в $out - ": Zip". Ничего не экстрактируется, просто : Zip и все.
Нафиг.

Пошел более сложным путем. Взять бету Unzip, или пропатчить стабильную, собрать, установить. Окей. Но этих "бет" и патчей оказался целый зоопарк. В итоге перебрал штук 5 разных вариантов. В первых четырех все компилилось, версия unzip -v стала 6.1.0с, но флаг -O был по прежнему not supported.

Сработало это. Делюсь.
Вот этот тред https://sourceforge.net/p/infozip/bugs/43/
Здесь смотрим коммент:

"We still have not released UnZip 6.10c (beta), but there's a newer
experimental (internal-only) source kit which may solve this problem:
As explained in that other thread, add "ICONV=1" to the usual "make"
command to enable the character-set conversion features (options: -I,
-O). (Look for "ICONV_MAPPING" in the "unzip -v" report.)"

Надо сделать именно это.

make -f unix/Makefile ICONV=1 generic
make -f unix/Makefile install

После, флаг -O становится доступным и можно пользоваться так: unzip -O cp866 Archive.zip

Комментариев нет: