Я получил ZIP-файл (ы), который содержит файлы, имена файлов в какой-то кодировке. Допустим, я знаю кодировку этих имен файлов, но я все еще не знаю, как правильно распаковать их.
Вот пример файла , он содержит один файл "【SSK 字幕 组】 Дневники вампира 吸血鬼 日记 S06E12.ass"
Я знаю, что используется кодировка GB18030 (китайский)
Вопрос - как распаковать этот файл во FreeBSD с помощью unzip или другой утилиты CLI, чтобы получить правильное закодированное имя файла? Я перепробовал все, что мог, но результат никогда не был хорошим. Пожалуйста помоги.
Я попробовал на OSX:
MBP1:test 2ge$ bsdtar xf gb18030.zip
MBP1:test 2ge$ ls
%A1%BESSK%D7%D6Ļ%D7顿The Vampire Diaries %CE%FCѪ%B9%ED%C8ռ%C7S06E12/ gb18030.zip
MBP1:test 2ge$ cd %A1%BESSK%D7%D6Ļ%D7顿The\ Vampire\ Diaries\ %CE%FCѪ%B9%ED%C8ռ%C7S06E12/
MBP1:%A1%BESSK%D7%D6Ļ%D7顿The Vampire Diaries %CE%FCѪ%B9%ED%C8ռ%C7S06E12 2ge$ ls
%A1%BESSK%D7%D6Ļ%D7顿The Vampire Diaries %CE%FCѪ%B9%ED%C8ռ%C7S06E12.ass*
MBP1:%A1%BESSK%D7%D6Ļ%D7顿The Vampire Diaries %CE%FCѪ%B9%ED%C8ռ%C7S06E12 2ge$ find . | iconv -f gb18030 -t utf-8
.
./%A1%BESSK%D7%D6L抬%D7椤縏he Vampire Diaries %CE%FC血%B9%ED%C8占%C7S06E12.ass
MBP1:%A1%BESSK%D7%D6Ļ%D7顿The Vampire Diaries %CE%FCѪ%B9%ED%C8ռ%C7S06E12 2ge$ convmv -r -f gb18030 -t utf-8 --notest .
Skipping, already UTF-8: ./%A1%BESSK%D7%D6Ļ%D7顿The Vampire Diaries %CE%FCѪ%B9%ED%C8ռ%C7S06E12.ass
Ready!
Я пробовал подобное с unzip, но я получаю похожую проблему.
Спасибо, теперь примеряю БЕСПЛАТНО BSD, где я подключаюсь по SSH из OSX (Терминал):
# locale
LANG=
LC_CTYPE="C"
LC_COLLATE="C"
LC_TIME="C"
LC_NUMERIC="C"
LC_MONETARY="C"
LC_MESSAGES="C"
LC_ALL=C
Во-первых, я бы хотел правильно показать китайские имена. я изменил
setenv LC_ALL zh_CN.GB18030
setenv LANG zh_CN.GB18030
Затем я скачал файл и попытался "ls", чтобы увидеть правильные символы, но не удачу. Поэтому я думаю, что мне нужно решить первую китайскую локаль, чтобы проверить, когда я получу правильный результат, на самом деле я могу сравнить его. Можете ли вы помочь мне, пожалуйста, с этим?
unzip
не имеет этой опции в Mac OS X и всегда создает закодированные в процентах имена файлов. Предложение @ javacomunar
сработало как шарм.unzip
говорит, чтоUnZip 6.00 of 20 April 2009, by Info-ZIP. Maintained by C. Spieler
и не предоставляет такие варианты.unzip
в Debian 9 точно такая же версия и нет таких опций. Наверное, специфичный для Ubuntu?В большинстве файловых систем POSIX имя файла представляет собой просто серию байтов, и пользовательское пространство может его понять. Вы можете использовать это в ваших интересах.
Во-первых, распакуйте архив, используя
bsdtar
, так какunzip
инструмент, кажется, манипулирует именами файлов, а bsdtar извлечет их в сыром виде. (Я тестирую это на Linux. Я думаю, что FreeBSD просто вызывает этоtar
.)Убедитесь, что такие инструменты, как
iconv
можно успешно декодировать имена:(Обратите внимание, что это влияет только на
find
вывод, а не на сами файлы.)Наконец, используйте
convmv
для преобразования имен файлов в UTF-8:(Примечание: мне пришлось установить Encode :: HanExtra из CPAN для поддержки GB18030 и вручную добавить
use Encode::HanExtra;
в / usr / bin / convmv, даже если он долженВ случае, если
convmv
он недоступен, запишите его:(По крайней мере, в Linux это имеет преимущество в том, что
iconv
оно почти всегда доступно и всегда поддерживает gb18030.)источник
Способ 1 : используйте утилиту unar
Способ 2. Использование сценария Python для распаковки файла (ссылка https://gist.github.com/usunyu/dfc6e56af6e6caab8018bef4c3f3d452#file-gbk-unzip-py )
Пример gb18030.zip извлечет следующий файл
источник
unar
метод наиболее беспроблемен, по крайней мере, в Mac OS X.На OS X вы можете использовать приложение с графическим интерфейсом под названием Unarchiver . Его можно установить с помощью Mac App Store или Homebrew Cask :
Когда вы открываете ZIP-файл с ним, приложение позволяет вам выбрать подходящую кодировку, используя предварительный просмотр имени файла из архива.
источник
7z поддерживает идентификатор кодировки с помощью переключателя
-scs
, например:где 903 - это кодировка Более длинный список идентификаторов кодировки можно найти здесь .
источник
7z
-scs
Параметр switch выбирает только кодировку@
списка определенных файлов.Используйте 7z, чтобы извлечь файл
После этого преобразуйте кодировку этих имен самостоятельно:
Это работает для меня .. В моем случае из_encoding является tis-620 (это тайская кодировка), вам нужно найти подходящую кодировку вашего языка. Популярный обычно решает проблему, но если имя файла по-прежнему нечитаемо, попробуйте изменить от -encoding к другим вещам, таким как windows-1252 или shift-jis (японский) или что-то еще, вы можете перечислить доступную кодировку, используя команду:
Это очень простой метод «как решить» для меня.
источник
Я просто использовал 7zip, и ему удалось выбрать правильную кодировку.
(то, что не мог сделать стандартный почтовый индекс)
но использовал его на Windows, с инструментом GUI. Возможно, командная строка 7z тоже подойдет вам.
источник