13

У меня есть много 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".

Есть мысли по этому поводу?

3 ответа3

2

Причина, по которой вы получаете предупреждение «уже в UTF-8», заключается в том, что эти строки действительно уже в UTF-8. Символ "ü" был закодирован в стиле OSX как "u", за которым следуют два байта «\xCC» и «\x88». Эти два байта вместе составляют представление UTF-8 \u0308, объединяющего диарез.

Если вы посмотрите на кодовую страницу 437, перечисленную здесь, вы увидите символ \xCC как «╠» и символ \x88 как «ê».

Независимо от того, что вы используете для отображения этих последовательностей символов, они интерпретируются не как UTF-8, а как CP437.

Быстрое доказательство, если вы читаете ruby, которое отображается, как и ожидалось, в моем терминале UTF-8:

$ ruby -e 'puts "u\xCC\x88"' | iconv -f cp437 -t utf-8
ü
$ ruby -e 'puts "u\xCC\x88"'
ü
0

Я предполагаю, что файловая система, которую вы пытаетесь распаковать или манипулировать файлами. FAT32 не понравится твоим умлаутам. Попробуйте скопировать эти файлы с флешки (или что у вас есть), а затем распакуйте zip-файл, чтобы увидеть, какие символы выдают имена файлов.

И NTFS (Windows), и Ext4 (Mint) не должны иметь проблем с кодировкой имени.

Кодировка имен самих zip-файлов в системе FAT32, скорее всего, не будет изменяться или исправляться при копировании их в надлежащую поддерживающую файловую систему, но подкаталоги при распаковке должны быть в порядке.

0

Во-первых, обратите внимание, что кодировка символов - это отдельная часть ада. В мире Windows все еще существует неприятный дуализм между UTF-8 и M $, который долгое время играл глупо и настаивал на ISO-8859 (угадайте, кто его придумал). Как уже упоминалось выше, это почти наверняка связано с файловой системой. Мое решение не техническое, а то, что работает для меня уже много лет:

Мой личный совет относительно имен файлов всегда один и тот же: просто придерживайтесь буквенно-цифровых символов, а также тире (-) и подчеркивания (_). Напиши умляут как аи, уе и ое. Не используйте пробелы и другие специальные символы. Поначалу это немного неудобно, но избавит вас от боли в неожиданных местах.

В качестве примечания: да, это своего рода неприятный "взлом", но если вы работаете кроссплатформенно, вам часто приходится прибегать к последнему общему знаменателю. Вы бы восприняли как должное, что что-то базовое, такое как кодирование символов, будет жестким стандартом, но оказывается, что получить стандарты сложно. Этот XKCD резюмирует это довольно хорошо

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .