Кто-то прислал мне ZIP-файл, содержащий файлы с ивритскими именами (и созданный в Windows, не уверен, каким инструментом). Я использую LXDE на Debian Stretch. Менеджер архивов Gnome распаковывает файл, но ивритские символы искажены. Я думаю, что я получаю октеты UTF-8, расширенные до символов Юникода, например, у меня есть файл, имя которого состоит из четырех символов и достаточного .doc, и символы: 0x008E 0x0087 0x008E 0x0085. Использование утилиты unzip из командной строки еще хуже - она вообще отказывается распаковывать, жалуясь на «недопустимый или неполный многобайтовый или широкий символ».
Итак, мои вопросы:
- Есть ли другая утилита распаковки, которая распаковывает мои файлы с правильными именами?
- Что-то не так с тем, как файл был сжат, или это просто несовместимость реализаций ZIP? Или даже ошибка / ошибка в утилитах Linux ZIP?
- Что я могу сделать, чтобы получить правильные имена файлов после распаковки, используя искаженные?
character-encoding
zip
unicode
file-format
einpoklum
источник
источник
Ответы:
Похоже, что имена файлов закодированы в одной из проприетарных кодовых страниц Windows ( CP862 , 1255 и т. Д.).
Есть ли другая утилита распаковки, которая распаковывает мои файлы с правильными именами? Мне не известна утилита zip, которая изначально поддерживает эти кодовые страницы. 7z немного разбирается в кодировках, но я полагаю, что это должна быть кодировка, о которой ваша система знает в целом (вы выбираете ее, устанавливая
LANG
переменную окружения), и кодовые страницы Windows, вероятно, не входят в их число.unzip -UU
должен работать из командной строки, чтобы создавать файлы с правильными байтами в их именах (отключив всю поддержку Unicode). Это, вероятно, тот эффект, который вы уже получили от инструмента GNOME. Кодировка в любом случае будет неправильной, но мы можем это исправить ниже.Что-то не так с тем, как файл был сжат, или это просто несовместимость реализаций ZIP? Или даже ошибка / ошибка в утилитах Linux ZIP? Файл, который вам дали, не был создан переносимым. Это не обязательно неправильно для внутреннего использования, где кодировка фиксирована и известна заранее, хотя спецификация формата гласит, что имена должны быть либо UTF-8, либо cp437, а ваши - нет. Даже между компьютерами с Windows использование разных кодовых страниц не работает хорошо, но машины, не работающие с Windows, не имеют понятия об этих кодовых страницах с самого начала. Большинство инструментов UTF-8 кодируют свои имена файлов (что по-прежнему не всегда достаточно, чтобы избежать проблем).
Что я могу сделать, чтобы получить правильные имена файлов после распаковки, используя искаженные? Если вы можете определить кодировку имен файлов, вы можете преобразовать байты в существующих именах в UTF-8 и переместить существующие файлы в правильное имя. По
convmv
сути, инструмент объединяет этот процесс в одну команду:convmv -f cp862 -t utf8 -r .
он попытается преобразовать все, что находится внутри,.
из cp862 в UTF-8.В качестве альтернативы вы можете использовать
iconv
иfind
для перемещения всего на свои правильные имена. Что-то вроде:найдет все файлы в текущем каталоге и попытается преобразовать имена в UTF-8.
В любом случае вы можете поэкспериментировать с различными кодировками и попытаться найти ту, которая имеет смысл.
После того, как вы исправили кодировку для вас, если вы хотите отправить эти файлы обратно в другом направлении, возможно, у вас возникнет та же проблема на другом конце. В этом случае вы можете повернуть процесс вспять, прежде чем архивировать файлы
-UU
, так как, вероятно, это будет очень трудно исправить на стороне Windows.источник
rar
илиp7zip
отказаться от обработки архивов .zip. Есть ли способ извлечь архив с именами файлов в проприетарных кодировках в Linux? Когда я извлекаю сunzip
, я получаю ошибку: «ошибка: не могу создать createи╨╕╨┐ / Ship_╨п ╨Я╤А╨╛╤З╨╗╨░ ╨Я╤А╨╛ ╨н╤В╨╛ ╨ ▓╨Ю╨┤╨╜╨╛╨╣ ╨Ъ╨╜╨╕╨╢╨║╨╡! .Png Имя файла слишком длинное "LANG=ru_RU.CP1251; unzip Bleed.zip
(в моем случае это была кодировка кириллицы). Теперь мне интересно, как я могу настроить свою систему так, чтобы я мог по умолчанию правильно открывать такие ZIP-файлы в графическом интерфейсе?unzip -UU foo.zip
работал на турецких персонажейУ меня был успех с командой
7z x <source.zip>
.Версия:
Потенциально значимая среда:
Он смог распаковать все файлы с 8-битными символами в именах файлов, некоторые из них были пропущены, некоторые искажены.
источник
У меня только что была такая же проблема, и оказалось, что моя версия,
unzip
которая доступна из репозиториев Ubuntu (UnZip 6.00 of 20 April 2009, by Debian. Original by Info-ZIP.
), может обрабатывать автоматическое декодирование имен файлов, если вы укажете-a
переключатель.источник
unzip
в-a
коммутаторе ухаживает преобразования текстовых файлов. Не имена файлов.У меня была похожая проблема с декодированием zip-архива с кириллическими символами. Однострочный скрипт на Python сделал свою работу правильно:
Тогда просто позвони
unzip_enc
и назовиunzip_enc ZIP_FILE [TARGET_DIR]
Для меня ни переменные окружения
unzip -UU
,unzip -a
ниLANG*
переменные среды не принесли пользы.источник
Мне повезло с этой комбинацией:
добавить --notest к convmv для фактического переименования. Позже я нашел еще лучшую версию:
источник
LANG
переменные и из кодирующих в зависимости от файла под руку. У меня есть файл, гдеLANG=ru_RU.CP1251
вместе с-f cp866
работал.У меня есть zip-архив, сжатый в Linux (из командной строки), а имена файлов с диакритическими знаками неправильно распаковываются в Windows, но я успешно распаковал его с помощью программного обеспечения Bandizip, которое может устанавливать кодировку на панели инструментов.
источник