Исправлена ​​кодировка немецких умлаутов в каталогах и именах файлов (ü = u╠ê и т. Д.)


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".

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


Какую антикварную систему вы используете? Все текущие дистрибутивы Linux сейчас используют UTF-8.
BatchyX

Может ли это быть проблемой файловой системы? Возможно, он не установлен в UTF?
Terdon

Я использую Linux Mint 13 (на основе Ubuntu 12.04 LTS с Kernel 3.2.0-23), так что это далеко не антично. И, как я уже писал, я также попробовал эти файлы на виртуальной машине Windows 7. Но, конечно, я не знаю, что использовал тот, кто создал zip-файлы.
сидр

1
Эта кодировка кажется чем-то вроде кодировки DOS. Обычно, если я вижу проблемы с кодировкой UTF8, немецкие умляуты выглядят как ä = ä или Ü = œ
сидр

@cider try find -type f -print0 |xargs -r -n1 -0 convmv -f WINDOWS-1252 -t UTF-8 --notest Эта команда находит файлы из текущей директории и запускает convmv отдельно для каждого файла. Имя файла кодируется как нулевой список.
Манве

Ответы:


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 резюмирует это довольно хорошо


Мне надоели проблемы с кодированием в именах файлов, когда я пытаюсь (и не могу) синхронизировать файлы между Mac, Windows и Linux (через синхронизацию). Я бы адаптировал ваш совет, однако на турецком есть буквы ç, ş, ı, ğ, ü, ö, которые неудобно писать буквенно-цифровыми цифрами. Я хочу воздержаться от использования облачного хранилища, но эта проблема заставляет меня это делать.
Teo
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.