Korrektur der Kodierung deutscher Umlaute in Verzeichnissen und Dateinamen (ü = u╠ê usw.)


13

Ich habe viele zip-Dateien, in denen es Kodierungsfehler für die deutschen Umlaute (äüöÄÜÖß) gibt. Sie erscheinen sowohl in der Datei filename.zip als auch in den enthaltenen Verzeichnissen und Dateien wie folgt:

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

und so weiter. Normalerweise verwende ich Linux, aber aufgrund dieser Probleme habe ich auch eine Windows7-VM ausprobiert, aber dies führt zu dem gleichen Kodierungsfehler. Unter Linux habe ich mit convmv und detox rumgespielt, aber ohne Erfolg.

Wenn ich benutze

  • convmv -f iso-8859-1 -t utf8 --replace --notest -r *

Ich bekomme "Skipping, schon UTF-8".

Irgendwelche Gedanken dazu?


Welches antike System benutzt du? Alle aktuellen Linux-Distributionen verwenden jetzt UTF-8.
BatchyX

Könnte dies ein Dateisystemproblem sein? Vielleicht ist es nicht in UTF gemountet?
Terdon

Ich benutze Linux Mint 13 (basierend auf Ubuntu 12.04 LTS mit Kernel 3.2.0-23), das ist also alles andere als altmodisch. Und wie ich bereits schrieb, habe ich auch versucht, diese Dateien auf einer Windows 7-VM. Aber natürlich weiß ich nicht, was derjenige, der die Zip-Dateien erstellt hat, verwendet hat.
Apfelwein

1
Diese Kodierung scheint eine Art DOS-Kodierung zu sein. Wenn ich Probleme mit der UTF8-Codierung sehe, sehen die deutschen Umlaute normalerweise so aus wie ä = ä oder Ü = Ü
Cider

@cider try Findet find -type f -print0 |xargs -r -n1 -0 convmv -f WINDOWS-1252 -t UTF-8 --notest Dateien ab dem aktuellen Verzeichnis und führt convmv für jede Datei separat aus. Dateiname wird als nullterminierte Liste angegeben.
Manwe

Antworten:


2

Der Grund, warum die Warnung "Bereits UTF-8" angezeigt wird, ist, dass diese Zeichenfolgen tatsächlich bereits in UTF-8 enthalten sind. Das "ü" -Zeichen wurde im OSX-Stil als "u" gefolgt von den zwei Bytes "\ xCC" und "\ x88" codiert. Diese beiden Bytes bilden zusammen die UTF-8-Darstellung von \ u0308, der kombinierenden Diaeresis.

Wenn Sie sich die Codepage 437 ansehen, die hier aufgelistet ist , sehen Sie das Zeichen \ xCC als "╠" und das Zeichen \ x88 als "ê".

Was auch immer Sie zum Anzeigen dieser Zeichenfolgen verwenden, interpretiert sie nicht als UTF-8, sondern als CP437.

Ein schneller Beweis, wenn Sie Ruby lesen, der in meinem UTF-8-Terminal wie erwartet angezeigt wird:

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

0

Ich vermute, das Dateisystem, das Sie versuchen, die Dateien zu dekomprimieren oder zu manipulieren. FAT32 wird deine Umlaute nicht mögen. Versuchen Sie, diese Dateien vom Flash-Laufwerk zu kopieren (oder was haben Sie), und dekomprimieren Sie dann die ZIP-Datei, um zu sehen, welche Art von Zeichen die Dateinamen erzeugen.

Sowohl NTFS (Windows) als auch Ext4 (Mint) sollten kein Problem mit der Namenscodierung haben.

Die Namenscodierung der Zip-Dateien selbst auf dem FAT32-System wird sich wahrscheinlich nicht ändern oder korrigieren, wenn Sie sie in ein geeignetes unterstützendes Dateisystem kopieren. Die dekomprimierten Unterverzeichnisse sollten jedoch in Ordnung sein.


0

Beachten Sie zunächst, dass die Zeichenkodierung ein eigener Teil der Hölle ist. In der Windows-Welt gibt es immer noch einen üblen Dualismus zwischen UTF-8 und M $, der lange Zeit dumm war und auf ISO-8859 bestand (raten Sie mal, wer darauf gekommen ist). Wie oben erwähnt, hat es mit ziemlicher Sicherheit etwas mit dem Dateisystem zu tun. Meine Lösung ist keine technische, sondern eine, die seit vielen Jahren für mich funktioniert:

Mein persönlicher Rat für Dateinamen ist immer derselbe: Bleibe bei den alphanumerischen Zeichen plus Bindestrich (-) und Unterstrich (_). Schreibe Umlaute als ae, ue und oe. Verwenden Sie keine Leerzeichen oder andere Sonderzeichen. Anfangs ist es ein bisschen unbequem, aber es erspart Ihnen viel Schmerz an unerwarteten Orten.

Als Randnotiz: Ja, das ist eine Art übler "Hack", aber wenn Sie plattformübergreifend arbeiten, müssen Sie häufig auf den letzten gemeinsamen Nenner zurückgreifen. Man würde davon ausgehen, dass etwas Grundlegendes wie die Zeichencodierung ein harter Standard ist, aber es stellt sich heraus, dass Standards schwer zu bekommen sind. Diese XKCD fasst es ganz gut zusammen


Ich habe es satt, Probleme mit der Codierung von Dateinamen zu haben, wenn ich versuche (und versuche), Dateien zwischen Mac, Windows und Linux (über Syncthing) zu synchronisieren. Ich würde Ihren Rat anpassen, aber auf Türkisch gibt es ç, ş, ı, ğ, ü, ö, nicht bequem mit alphanumerischen Zeichen zu schreiben. Ich möchte auf Cloud-Speicher verzichten, aber dieses Problem zwingt mich dazu.
Teo
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.