Falsche Umlaute in Textdateien von WindowsFalsche Umlaute in Textdateien von Windows
Update: Da sich dieser Artikel großer Nachfrage erfreut, wurde er überarbeitet!
Viele Anwender bringen aus ihrer Windowszeit viele Dateien mit, die in reiner Textform vorliegen. Diese haben keine Headerinformationen wie z.B. Office-Dokumente. Fazit: Umlaute werden falsch oder gar nicht dargestellt.
Das liegt daran, dass Linux und Windows diese Dateien unterschiedlich codieren. Ein Ärgernis, dass schon seit den Anfangszeiten von Microsoft besteht. Besonders betroffen sind auch HTML-Dateien. Während diese im Browser noch korrekt dargestellt werden (weil eben die entsprechenden Headerinfos in der Datei stehen), sind die Quellcodedateien von dieser Inkompatibilität betroffen, da diese oftmals noch als reine Textdateien im ANSI-Format gespeichert werden.
Lösungsvorschläge
Handelt es sich nur um 3 oder 4 Dateien und hat man noch eine Windowsinstallation zur Hand, können diese Dateien im Texteditor (Notepad) geöffnet werden, man wählt Speichern unter… und gibt als Zeichencodierung »utf-8« an.
Aber viel eleganter und schneller geht es – vor allem bei vielen Dateien – auf der Konsole von Linux. Als erstes ermittelt man die eingestellte Textcodierung mit dem Befehl »echo $LANG«:
turicon@ubuntu-desktop:~$ echo $LANG de_DE.UTF-8 turicon@ubuntu-desktop:~$
Wahrscheinlich wird UTF-8 angezeigt, es kann aber auch als Ergebnis »de_DE.iso885915« oder etwas ähnliches dort stehen. Alles was nach dem Punkt kommt wird benötigt, um die Textdateien zu konvertieren. Dazu existiert unter Linux der Befehl recode. Falls der Befehl nicht existiert, installiert man ihn mittels:
sudo apt-get install recode
Ich empfehle, generell auf UTF-8 umzusteigen. Das ist ein internationaler Standard, der in Zukunft von allen Systemen eingesetzt wird. Auch Windows und viele Editoren unterstützen diese Codierung, mit der es z.B. keine Umlautprobleme mehr geben soll (einzige Voraussetzung ist, dass die Schriftart die Umlaute auch darstellen kann). Wer das nicht will, ersetzt UTF-8 mit der angezeigten Codierung, z.B. »iso885915«.
WICHTIG! Als erfahrener User arbeitest Du ab jetzt mit einer Sicherheitskopie, richtig?
recode ms-ansi..UTF-8 test.txt
Mit diesem Befehl wandelt man eine Textdatei in UTF-8 um. Jetzt werden die Umlaute auch richtig angezeigt. Kommt keine Quittierung seitens Linux? Daran muss man sich gewöhnen und unter Linux gilt „Keine Nachricht ist eine gute Nachricht!“ Soll heißen, wenn keine weitere Ausgabe kommt, hat alles funktioniert.
Tipp: Sollte der Dateiname Leerzeichen enthalten, dann setzt man den ganzen Dateinamen in Anführungszeichen, so wie hier:
recode ms-ansi..UTF-8 "ich bin ein test.txt"
Nun noch ein Tipp für die, die sehr viele Textdateien haben. Bei mir waren es weit über 2000, da ich als Webdesigner arbeite und viele HTML‑, PHP‑ und SQL-Dateien konvertieren musste. Mit folgender Anweisung konvertierte ich hunderte von HTML-Dateien in einem Rutsch:
turicon@ubuntu-desktop:~$cd html-projekte
turicon@ubuntu-desktop:~/html-projekte$ find . -iname *.html -exec recode ms-ansi..UTF-8 {} \;
turicon@ubuntu-desktop:~$
Was habe ich gemacht?
Zuerst bin ich mittels cd (ⅽhange ⅾirectory/wechsle Verzeichnis) in den Hauptordner gewechselt, in dem alle HTML-Dateien gespeichert sind. Dann lasse ich mit dem Befehl »find« nach allen Dateien suchen, die mit ».html« enden. ». –iname« ist dazu da, alle Dateien zu finden, unabhängig von Groß-/Kleinschreibung! Bei den gefundenen Dateien führe ich durch den Paramenter »-exec« den recode-Befehl aus.
Übrigens, »find« sucht alle Dateien ab dem aktuellen Ordner, also inklusive Unterordnern! Das
{} \;
am Ende gehört zu »-exec« (Aktion ausführen). Die geschweiften Klammern werden mit der gefundenen Zeichenfolge – also in diesem Falle mit dem Dateinamen – ersetzt. Das Semikolon beendet die ganze Sequenz und ist extra mit dem Backslash maskiert. Nähere Infos sind in den man-Pages zu finden.
Tipp: Wenn man auch PHP-Dateien, HTM-Dateien oder andere Arten von Textdateien hat, klickt man auf die »Pfeiltaste nach oben«, der letzte Befehl erscheint wieder, manövriert den Cursor an die richtige Stelle und ersetzt den Suchstring »*.html« gegen die entsprechende Erweiterung und wiederholt den Befehl. Und zum Schluss (bei vielen Dateien kann das schon eine Weile dauern) sieht man wieder die Eingabeaufforderung – ein gutes Zeichen!
Weitere Infoquellen: Das Wiki von ubuntuusers.de
Hallo!
Ich habe jetzt gerade genau das Problem und hab auch alles gemacht wie geschrieben und habe ein Verzeichnis mit allen PHP Dateien umbenannt.
Aber es hat nicht so geklappt wie es sollte: Zwar wurden alle Sonderzeichen verändert und sehen jetzt auch anders aus als vorher (waren vorher eine Raute mit einem Fragezeichen drin, jetzt ist es eine Anreihung anderer Sonderzeichen, unter anderem ½ als Bruch, umgedrehte Fragezeichen und sowas)
Hast du auch da einen Rat?
Antwort: Hallo eddy, kann es sein, dass Dein Editor, mit welchem Du unter Windows gearbeitet hast, schon eine andere Kodierung genommen hat, z.B. iso-8859–1? Dann musst Du das eingeben, anstatt ms-ansi.
Das ist ja das verrückte daran: Ich nutze Eclipse und dachte eigentlich das wäre damit kein Problem und soweit ich weiß, speichert Eclipse Daten ja auch im UTF-8 Format. Ich kann jetzt nicht genau abschätzen, ob das nur in Dateien vorkommt, die ich nicht selbst mit Eclipse erstellt, sondern nur importiert hab, aber ich dachte eigentlich, dass spätestens beim ersten speichern mit Eclipse in UTF umgewandelt wird…
Hm, alles sehr seltsam… werde meine Recherche jetzt wohl auch auf Eclipse ausweiten…
Falls dir noch was einfällt, kannst du mir gerne auch per E-Mail antworten, dann müssen wir das nicht in den Kommentaren hier diskutieren
gruß, eddy
Antwort: Problem haben wir gelöst. Vor der Verwendung unter Linux müssen die Dateien recodiert werden!
Hallo,
endlich mal ein Artikel mit einen Thema, was mich schon längere Zeit stranguliert. Mein Problem ist aber nicht innerhalb von Textdateien zu finden sondern schon außerhalb:
Es kommt nämlich immer wieder vor, dass im Dateimanger (Konqueror, Nautilus) die Sonderzeichen der Dateinamen nicht dargestellt werden. Workaround war bisher das manuelle edieren der Dateinamen, indem die ich, die nicht richtig dargestellten Umlaute löschte und dann nochmal eingab. Das ist allerdings auf Dauer keine Lösung. Gibts dafür auch eine Lösung?
Grüße
Thomas
Antwort: Ja, das Thema ist bekannt und ärgerlich. Jetzt kommt es darauf an, wie Du die Dateien eingebunden hast. Liegen die noch auf einer Windowspartition (mit fat32)? Dann könnte Dir dieser Thread im uu.de-Forum helfen.
Und soviel ich weiß, gibt es immer wieder Probleme mit USB-Sticks, die mit »fat« formatiert sind. Hier existiert zumindest im Nautilus von Intrepid Ibex eine Lösung, da werden unbekannte Zeichen durch einen Unterstrich ersetzt.
Die lagen teilweise mal auf NTFS oder FAT. Jetzt liegen sie auf ext3. Viele Dateien wurden noch unter Windows erstellt.
Nautilus hat mir jetzt noch „(ungültige Kodierung)“ in den Dateinamen geschrieben.
Antwort: Schau mal hier rein. Vielleicht hilft es. Da ich schon seit Jahren immer wieder Linux im Einsatz hatte (Server) und vorher (Amiga, MS-DOS, Win3.1) eh keine Umlaute erlaubt waren, kommen bei mir generell keine Umlaute in Dateinamen vor. Es ist auch das Erste, was ich anderen beibringe.
Was ich tun würde, hätte ich das Problem:
Danke. Schade das es keine andere Lösung gibt. Dann sollen halt diese missratenen Umlaute als Mahnwache vor Windows herhalten. – Ich finde, das ist auch eine Lösung.