У меня есть много zip-файлов, в которых есть ошибки кодирования для немецких умлаутов (äüöÄÜÖß). Они отображаются как в filename.zip, так и во включенных каталогах и файлах, таких как:
- Fünf = Fu╠ênf
- Räuber = Ra╠êuber
- Überfall = U╠êberfall
и так далее. Обычно я использую Linux, но из-за этих проблем я также попробовал виртуальную машину Windows7, но это приводит к той же путанице в кодировке. В Linux я играл с convmv и detox, но безуспешно.
Когда я использую
- convmv -f iso-8859-1 -t utf8 - заменить --notest -r *
Я получаю "Пропуск, уже UTF-8".
Есть мысли по этому поводу?
find -type f -print0 |xargs -r -n1 -0 convmv -f WINDOWS-1252 -t UTF-8 --notest
Эта команда находит файлы из текущей директории и запускает convmv отдельно для каждого файла. Имя файла кодируется как нулевой список.Ответы:
Причина, по которой вы получаете предупреждение «уже в UTF-8», заключается в том, что эти строки действительно уже в UTF-8. Символ «ü» был закодирован в стиле OSX как «u», за которым следуют два байта «\ xCC» и «\ x88». Эти два байта вместе составляют представление UTF-8 \ u0308, объединяющего диарез.
Если вы посмотрите на кодовую страницу 437, перечисленную здесь , вы увидите символ \ xCC как «╠» и символ \ x88 как «ê».
Независимо от того, что вы используете для отображения этих последовательностей символов, вы интерпретируете их не как UTF-8, а как CP437.
Быстрое доказательство, если вы читаете ruby, которое отображается, как и ожидалось, в моем терминале UTF-8:
источник
Я предполагаю, что файловая система, которую вы пытаетесь распаковать или манипулировать файлами. FAT32 не понравится твоим умлаутам. Попробуйте скопировать эти файлы с флешки (или что у вас есть), а затем распакуйте zip-файл, чтобы увидеть, какие символы выдают имена файлов.
И NTFS (Windows), и Ext4 (Mint) не должны иметь проблем с кодировкой имени.
Кодировка имен самих zip-файлов в системе FAT32, скорее всего, не будет изменяться или исправляться при копировании их в надлежащую поддерживающую файловую систему, но подкаталоги при распаковке должны быть в порядке.
источник
Во-первых, обратите внимание, что кодировка символов - это отдельная часть ада. В мире Windows все еще существует неприятный дуализм между UTF-8 и M $, который долгое время играл глупо и настаивал на ISO-8859 (угадайте, кто его придумал). Как упоминалось выше, это почти наверняка связано с файловой системой. Мое решение не техническое, а то, что работает для меня уже много лет:
Мой личный совет относительно имен файлов всегда один и тот же: просто придерживайтесь буквенно-цифровых символов, а также тире (-) и подчеркивания (_). Напиши умляут как аи, уе и ое. Не используйте пробелы и другие специальные символы. Поначалу это немного неудобно, но избавит вас от боли в неожиданных местах.
В качестве примечания: да, это своего рода неприятный «взлом», но если вы работаете кроссплатформенно, вам часто приходится прибегать к последнему общему знаменателю. Вы бы восприняли как должное, что что-то базовое, такое как кодирование символов, будет жестким стандартом, но оказывается, что получить стандарты сложно. Этот XKCD резюмирует это довольно хорошо
источник