Как я могу правильно распаковать ZIP-архив файлов с ивритскими именами?

(Вопрос о самопередвижении от superuser.com)

Кто-то прислал мне ZIP-файл, содержащий файлы с ивритскими именами (и создан в Windows, не уверен, с каким инструментом). Я использую LXDE в Debian Stretch. Менеджер архива Gnome позволяет распаковать файл, но ивритские символы искажены. Я думаю, что я получаю октеты UTF-8, расширенные в символы Unicode, например, у меня есть файл, чье имя имеет четыре символа и .doc suffic, а символы: 0x008E 0x0087 0x008E 0x0085. Использование утилиты unzip в командной строке еще хуже – она ​​отказывается полностью распаковываться, жалуясь на «Недопустимый или неполный многобайтовый или широкий символ».

Итак, мои вопросы:

  • Есть ли еще одна утилита для декомпрессии, которая будет распаковывать мои файлы с правильными именами?
  • Что-то не так с тем, как файл был сжат, или это просто несовместимость реализаций ZIP? Или даже недостоверность / ошибка Linux-утилит Linux?
  • Что я могу сделать, чтобы получить правильные имена файлов после распаковки с помощью искаженных?

One Solution collect form web for “Как я могу правильно распаковать ZIP-архив файлов с ивритскими именами?”

Похоже, что имена файлов закодированы в одной из проприетарных кодовых страниц Windows ( CP862 , 1255 и т. Д.).

  • Есть ли еще одна утилита для декомпрессии, которая будет распаковывать мои файлы с правильными именами? Я не знаю об утилите zip, которая поддерживает эти кодовые страницы изначально. 7z имеет некоторое понимание кодировок, но я считаю, что это должна быть кодировка, которую ваша система знает в более общем плане (вы выбираете ее, устанавливая переменную среды LANG ), и кодовые страницы Windows, вероятно, не входят в число таких.

    unzip -UU должен работать из командной строки для создания файлов с правильными байтами в их именах (отключив всю поддержку Unicode). Вероятно, это эффект, который вы получили от инструмента GNOME. Кодирование не будет правильным в любом случае, но мы можем исправить это ниже.

  • Что-то не так с тем, как файл был сжат, или это просто несовместимость реализаций ZIP? Или даже недостоверность / ошибка Linux-утилит Linux? Файл, который вы предоставили, не создан портативно. Это не обязательно неправильно для внутреннего использования, когда кодирование фиксировано и известно заранее, хотя спецификация формата говорит, что имена должны быть либо UTF-8, либо cp437, а ваши не являются ни тем, ни другим. Даже между машинами Windows использование разных кодовых страниц не очень хорошо работает, но для компьютеров, отличных от Windows, не существует понятия этих кодовых страниц. Большинство инструментов UTF-8 кодируют свои имена файлов (чего не всегда достаточно, чтобы избежать проблем).

  • Что я могу сделать, чтобы получить правильные имена файлов после распаковки с помощью искаженных? Если вы можете определить кодировку имен файлов, вы можете преобразовать байты в существующие имена в UTF-8 и переместить существующие файлы в нужное имя. Инструмент convmv существу завершает этот процесс в одну команду: convmv -f cp862 -t utf8 -r . попытается преобразовать все внутри . от cp862 до UTF-8.

    Кроме того, вы можете использовать iconv и find чтобы переместить все в правильные имена. Что-то вроде:

     find -mindepth 1 -exec sh -c 'mv "$1" "$(echo "$1" | iconv -f cp862 -t utf8)"' sh {} \; 

    найдет все файлы под текущим каталогом и попытается преобразовать имена в UTF-8.

    В любом случае вы можете поэкспериментировать с разными кодировками и попытаться найти тот, который имеет смысл.


После того, как вы исправили кодировку для вас, если вы хотите отправить эти файлы обратно в другом направлении, возможно, у вас будет такая же проблема на другом конце. В этом случае вы можете выполнить обратный процесс перед тем, как закрепить файлы с помощью -UU , так как это очень сложно исправить в конце Windows.

  • Возможно ли в unix выполнять поиск внутри zip-файлов
  • Любой способ переопределить защиту обхода пути при распаковке?
  • Почему `zip` в цикле for работает, когда файл существует, но не тогда, когда он этого не делает?
  • Как перенаправить unzip -v вывод в файл журнала в сценарии оболочки
  • Возможно ли интегрировать файлы zip и tar.gz в качестве каталога в файловую систему
  • Zip не сжимает файлы при застегивании
  • проблема с zip-файлом с использованием пароля
  • распаковать / распаковать файлы с помощью Curl на ftp-сервере
  • Менеджер архива не показывает файл с именем «-»
  • Как zip рекурсивно все подкаталоги, содержащие только текстовые файлы
  • Защищенные паролем zip-архивы открываются без пароля
  • Interesting Posts

    Nautilus, монтируйте ISO-файл с помощью контекстного меню

    Как я могу создать пользовательский дистрибутив для запуска простого веб-браузера?

    Есть ли способ сортировать grep-вывод csv-файла?

    Git Server: игнорировать пробельные изменения в новых коммитах

    / etc / profile не читается в измененной оболочке пользователя

    Как скопировать каталог рекурсивно с помощью hardlinks для каждого файла

    Как удалить столбец или несколько столбцов из файла с помощью команды оболочки?

    Как grep несколько файлов, используя часть имени файла как шаблон?

    Не удалось сохранить вывод команды в переменной

    Звуковой тон / синусоидальный генератор с частотным датчиком

    IPv4 отправляется в автономном режиме несколько раз в час на безголовый удаленный сервер, IPv6 не затрагивается

    Как подключить зашифрованный раздел MS Windows 7 в Linux?

    Как выполнить ping GW в подсети?

    Самый легкий SMTP-сервер для одиночного компьютера Linux (SBC)

    Git больше не поддерживает автоматическую перезагрузку?

    Linux и Unix - лучшая ОС в мире.