05 сентября 2020

Распаковка zip-архива с нестандартной кодировкой в Linux.

 
Приспичило мне распаковать один архив на удалённой машине с Linux на борту. Внутри архива были файлы с именами в кодировке cp936 (simplified Chinese).
 
Я уверен, что в сети много информации по этой теме, но в самый нужный момент все найденные инструкции не сработали из-за наличия пароля в архиве. Пришлось спрашивать способы решения у живых людей.
 
Что я пробовал.
 
Сначала unzip с указанием кодировки:
unzip -O cp936 -l file.zip
Содержимое архива выводилось правильно, но при попытке его распаковать я получал сообщение "need PK compat. v5.1 (can do v4.6)".
Далее 7z с указанием кодировки:
7z l -scs936 file.zip
В консоль выводилась каша, распаковывалось так же.
 
Что мне в итоге помогло.
 
Обработка архива с помощью программы runzip.
Программу пришлось отдельно собирать из исходников, потому что runzip из репозиториев Debian является частью пакета rzip и служит для распаковки больших zip-архивов, судя по описанию.
runzip -s cp936 file.zip
Программа исправила кодировку имён на юникод, изменив исходный файл. Полученный файл уже успешно распаковался с помощью программы 7z, которая в процессе распаковки запросила пароль от архива.
 
Распаковка с помощью программы unar с указанием кодировки.
 
Позже я узнал о существовании программы unar, которая умеет распаковывать множество разных форматов архивов и имеет до кучи cli-интерфейс. С её помощью получилось сразу распаковать архив с паролем без каких-либо модификаций исходного файла.
unar -e cp936 file.zip
Программа есть в репозитории Debian, так что ничего качать и собирать не пришлось.

-->