> Одна из неожиданных проблем, возникающих при обмене файлами с пользователями Windows -
> странное поведение ZIP-архивов. Казалось бы, достаточно правильно настроить кодировки...
> Не тут-то было!...
Да, это полезный совет. Всё верно. Пока существуют винды и WinZip и InfoZip, придётся иметь дело с архивами, из которых файлы на юниксах будут извлекаться с искорёженными названиями.
Но! Описанное решение проблемы, по-моему, не лучше самой проблемы, имея в виду его собственную сложность и трудоёмкость поддержки. Я то же самое давно решаю несколько иначе и, мне кажется, удобнее. Правда, я ничего не делал с zip-ом.
Что же сделано? Во-первых, исключены все переделки кодировок в процедурах вывода unzip -- в трёх местах (два в fileio.c и одно, кажется, в list.c) три вызова спрятаны под комментарий. Эти места легко отыскиваются во всех версиях unzip от 5-й до 6-й, и вполне просто переделываются. Во-вторых, пересобранный unzip называется, скажем, unzip0, и укладывается хоть бы и в ~/bin. В-третьих, немного дорабатываются скрипты работы с "файловой системой UZIP" из состава midnight commander (т.е., открытие архивов как обычных каталогов). В них: (а) меняются вызовы unzip на unzip0; (б) добавляется перекодировка получаемого списка названий с помощью iconv (этот тул давно присутствует во всех линуксах из коробки, и даже в freebsd без него не обходятся); (в) изменённые скрипты (их можно сделать несколько, для разных кодировок исходного архива) укладываются в ~/.mc/ или ~/.config/mc (зависит от версии mc). После этого можно в коммандере, как обычно, открывать архивы как каталоги, работать с файлами и т.д.
Достоинства изложенного здесь решения: 1) делается просто 2) даёт удобный инструмент 3) не требует целовать никаких разработчиков ни в какие места 4) сохраняет работоспособность при сменах дистрибутива и даже, с очевидными мелкими доработками, при сменах системы в пределах юниксов. Наконец, оно оставляет возможность выбора окончательного решения за человеком, как самым лучшим опознавателем кодировок. :)
Недостатки изложенного здесь решения: 1) влияет лишь на один инструмент (mc) и не влияет на unzip общесистемной доступности 2) требует кой-каких дополнительных движений в mc (active VFS list->Free VFSs now и что-то вроде cd abc.zip#uzipu), если кодировка в архиве была не предугаданной (не той, с которой работает доработанный mc-ский скрипт для uzip).