Виправити кодування німецьких umlauts у каталогах та іменах (ü = u╠ê тощо)


13

У мене багато zip-файлів, де є помилки кодування для німецьких umlauts (äüöÄÜÖß). Вони відображаються як у filename.zip, так і у включених каталогах та таких файлах:

  • Fünf = Fu╠ênf
  • Räuber = Ra╠êuber
  • Überfall = U╠êberfall

і так далі. Зазвичай я використовую Linux, але через ці проблеми я також спробував Windows 7 VM, але це призводить до того ж безладного кодування. У Linux я грав із convmv та detox, але без успіху.

Коли я використовую

  • convmv -f iso-8859-1 -t utf8 - замінити --нотест -r *

Я отримую "Пропуск, вже UTF-8".

Будь-які думки з цього приводу?


Яку антикварну систему ви використовуєте? У всіх поточних дистрибутивах Linux зараз використовується UTF-8.
BatchyX

Чи може це бути проблемою файлової системи? Можливо, він не встановлений в UTF?
тердон

Я використовую Linux Mint 13 (на основі Ubuntu 12.04 LTS з ядром 3.2.0-23), тому це далеко не антикварне. І як я вже писав, я також спробував ці файли в Windows 7 VM. Але я, звичайно, не знаю, чим користувався той, хто створив zip-файли.
сидр

1
Це кодування здається певним кодуванням DOS. Зазвичай, якщо я бачу проблеми з UTF8, що кодує німецькі умлати, виглядають як ä = ä або Ü = Ãœ
сидр

@cider try find -type f -print0 |xargs -r -n1 -0 convmv -f WINDOWS-1252 -t UTF-8 --notest Цей пошук файлів із поточного режиму dir і запускає convmv окремо на кожному файлі. Ім'я файлу позначається як нульовий список.
Манве

Відповіді:


2

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

Якщо ви подивитеся на сторінку коду 437, перелічену тут , ви побачите символ \ xCC як "╠", а символ \ x88 як "ê".

Що б ви не використовували для відображення цих послідовностей символів, не інтерпретуйте їх як UTF-8, а як CP437.

Швидкий доказ, якщо ви читаєте рубін, що відображається, як очікувалося, в моєму терміналі 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 (здогадайтеся, хто це придумав). Як було сказано вище, це майже напевно щось стосується файлової системи. Моє рішення не технічне, а таке, яке працює на мене вже багато років:

Моя особиста порада щодо імен файлів завжди однакова: просто дотримуйтесь буквено-цифрових знаків плюс тире (-) та підкреслення (_). Напишіть umlaute як ae, ue та oe. Не використовуйте пробіли та інші спеціальні символи. Спочатку це трохи незручно, але це вбереже вам багато болю в несподіваних місцях.

Як зауваження: так, це такий жахливий "хак", але якщо ви працюєте на крос-платформі, вам часто доводиться повертатися до останнього загального знаменника. Ви сприймете це як належне, що щось базове, як кодування символів, було б важким стандартом, але, виявляється, стандарти важко отримати. Цей XKCD підсумовує це досить добре


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