Есть ли другая утилита распаковки, которая распаковывает мои файлы с правильными именами? Мне не известна утилита 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
для перемещения всего на свои правильные имена. Что-то вроде:
find -mindepth 1 -exec sh -c 'mv "$1" "$(echo "$1" | iconv -f cp862 -t utf8)"' sh {} \;
найдет все файлы в текущем каталоге и попытается преобразовать имена в UTF-8.
В любом случае вы можете поэкспериментировать с различными кодировками и попытаться найти ту, которая имеет смысл.
После того, как вы исправили кодировку для вас, если вы хотите отправить эти файлы обратно в другом направлении, возможно, у вас возникнет та же проблема на другом конце. В этом случае вы можете повернуть процесс вспять, прежде чем архивировать файлы -UU
, так как, вероятно, это будет очень трудно исправить на стороне Windows.