вторник, 29 декабря 2009 г.

Кодировка в zip-архивах.

Оказалось, что Windows хранит имена файлов внутри zip-архива в странной кодировке. Точнее они получаются кодированные несколько раз, и соответственно при распаковке в *nix смотрятся примерно так:

tmp $ unzip -l Luk-F.zip
Archive: Luk-F.zip
Length Date Time Name
--------- ---------- ----- ----
0 2009-12-01 12:06 ??????????-??????????/
1014063 2009-11-30 12:00 ??????????-??????????/AlReader2.win32.ru.zip
1335515 2009-11-30 12:00 ??????????-??????????/AlReader2.zip
616504 2009-11-30 12:00 ??????????-??????????/AlReader_Help.zip
625572 2009-11-30 12:00 ??????????-??????????/QDictionary.zip
0 2007-09-28 02:57 ??????????-??????????/???????/
0 2009-11-30 11:58 ??????????-??????????/???????/?????? - ???????? ???????/
696811 2007-10-24 13:22 ??????????-??????????/???????/?????? - ???????? ???????/?????????? ?????? - ?????? - ???????? ???????.fb2

Для правильного отображения, после распаковки, следует использовать

convmv -r -f cp1252 -t cp850 * --notest && convmv -r -f cp866 -t utf-8 * --notest

Подсмотрено у TuxR