Zeichensatz-Konverter
Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:
Dieser Artikel ist größtenteils für alle Ubuntu-Versionen gültig.
Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:
Im Computerbereich gibt es eine Vielzahl von Zeichensätzen, nach denen Buchstaben für den Computer "kodiert" werden, wobei die Kodierungen in Teilen untereinander inkompatibel sind. Dies kann z.B. bedeuten, dass ein Text, der auf einem System mit dem voreingestellten Zeichensatz XYZ lesbar ist, während der gleiche Text auf dem System ABC nur aus Hieroglyphen besteht.
Der bekannteste Vertreter dieses Problems ist UTF-8 vs. ISO-8859-1. Hier werden alle "normalen" Buchstaben gleich dargestellt (bzw. kodiert), Sonderzeichen wie ä, ö und ü werden jedoch anderes kodiert, so dass bei falscher Zeichensatzeinstellung (im Browser oder Editor) stattdessen nur kryptische Zeichen dargestellt werden.
Ein weiteres, davon unabhängiges Problem ist, dass Linux- (bzw. Unix-) Systeme und Windows-Systeme unterschiedliche Kommandos für das Zeilenende nutzen. Während Windows als Zeilenende ein "CR + LF" (= Carriage Return + Line-Feed) verwendet, verwendet Linux nur "LF" (=Line-Feed). Dadurch kann es zur falschen Darstellung von Zeilenumbrüchen auf dem jeweils anderen System kommen.
Ubuntu bzw. Linux bietet hierfür jedoch einige Möglichkeiten, die Konvertierung von Texten von einem Zeichensatz in den anderen schnell und komfortabel zu erledigen.
Hinweis:
Es geht hier um die Konvertierung von Textdokumenten oder Dateinamen, nicht um die Konvertierung von Texten, die z.B. mit OpenOffice bzw. LibreOffice oder MS Office geschrieben wurden.
Konvertierung per Editor¶
Viele unter Ubuntu / Linux gängige Editoren bieten die Möglichkeit der Zeichensatz-Konvertierung und / oder Änderung des Zeichens für das Zeilenende.
Gedit¶
Gedit kann die Kodierung beim Speichern ändern, nicht jedoch die Zeilenendung. Um den Zeichensatz zu ändern wählt man "Datei → Speichern unter..." und kann dann im Auswahlfeld "Zeichenkodierung" diese für das zu speichernde Dokument ändern. Wird beim Öffnen einer bereits vorhandenen Datei der Zeichensatz nicht richtig erkannt und Gedit zeigt bei den Sonderzeichen nur kryptische Zeichen an, kann beim Öffnen-Dialog manuell ein Zeichensatz ausgewählt werden.
Kate¶
Kate ist der KDE Standardeditor. Möchte man mit ihm ein Dokument konvertieren, so lädt man das Dokument und wählt anschließend "Extras → Kodierung" um den Zeichensatz zu ändern oder "Extras → Zeilenende", um die Art des Zeilenendes zu konvertieren.
Leafpad¶
Bei Leafpad, dem Standard-Editor der Lubuntu-Desktop-Installation, können Zeichensatz und Zeilenende-Zeichen über den "Datei → Speichern unter"-Dialog festgelegt werden.
Mousepad¶
Bei Mousepad, dem Standard-Editor der Xubuntu-Desktop-Installation, können Zeichensatz und Zeilenende-Zeichen über den "Datei → Speichern unter"-Dialog festgelegt werden.
Hinweis:
Ab Xubuntu 13.04 (Mousepad 0.3.0) besteht diese Möglichkeit derzeit nicht mehr.
Geany¶
Unter Geany kann die Kodierung über den Menüpunkt "Dokument → Zeichenkodierung festlegen" geändert werden, die Art des Zeilenendes über "Dokument → Zeilenende anzeigen". Zusätzlich kann ein Dokument über den Menüpunkt "Datei → Neu laden als" mit einem anderen der über sechzig unterstützten Zeichensätze angezeigt werden.
SciTE¶
SciTE beherrscht nur 8-Bit Zeichenkodierung sowie UCS-2 und UTF-8. Über den Menüpunkt "Datei → Kodierung" wird der Zeichensatzt festgelegt. Die Zeichen für das Zeilenende werden über den Menüpunkt "Optionen → Zeilenende-Zeichen →" ausgewählt und über "Optionen → Zeilenende-Zeichen → festlegen" auf die Datei angewendet.
Vim¶
Mit VIM kann man ebenfalls den Zeichensatz ändern. Um zwischen Windows/DOS- und Unix-Formatierung zu wechseln benutzt man das Kommando :set ff
. Dabei zeigt einem :set ff ?
an, was für eine Formatierung momentan benutzt wird und mit :set ff=dos
bzw. :set ff=unix
kann man sie ändern. Um die Zeichenkodierung zu ändern benutzt man den Befehl :set encoding=WERT
. Mögliche Angaben für WERT sind die Zeichenkodierungen die Vim unterstützt. Eine Liste dieser kann man hier 🇬🇧 einsehen.
Konvertierung auf der Kommandozeile¶
Außer den oben genannten Editoren gibt es unter Ubuntu bzw. Linux zwei gängige und leistungsfähige Konverter für die Kommandozeile: iconv und recode. Beide bieten im Vergleich zu den Möglichkeiten der Editoren in Teilen (deutlich) mehr Optionen und Parameter.
iconv¶
iconv ist in der Standardinstallation von Ubuntu enthalten. Die allgemeine Syntax von iconv lautet [2]:
iconv [OPTIONEN] DATEI
wobei der gängigste Aufruf wahrscheinlich dieser ist:
iconv -f Zeichensatz1 -t Zeichensatz2 Ausgangsdatei -o Zieldatei
iconv kennt dabei die folgenden Optionen:
Optionen von iconv | |
Option | Beschreibung |
-f Name oder --from-code Name | Zeichensatz, aus dem konvertiert werden soll |
-t Name oder --to-code Name | Zeichensatz, in den konvertiert werden soll |
-c | Weglassen der Zeichen, welche im Zielzeichensatz nicht darstellbar sind |
-o Datei | Name der Ausgabedatei |
-l oder --list | zeigt alle Zeichensätze an, die iconv unterstützt, dies sind einige 100 verschiedene |
--verbose | ausführlichere Ausgabe des Fortschritts beim Konvertieren |
-s oder --silent | unterdrückt fast alle (Fehler-) Meldungen |
-h oder --help | zeigt eine kurze Hilfe zu iconv an |
iconv ändert zwar die Zeichensatzkodierung, ändert allerdings nicht die Art des Zeilenumbruches.
recode¶
recode ist die Alternative zu iconv. recode hat im direkten Vergleich weniger Zeichensätze, dafür aber Optionen und ist daher bei manchen Aufgaben flexibler. recode ist nicht in der Standardinstallation enthalten, kann aber über das folgende Paket installiert [1] werden:
recode
Befehl zum Installieren der Pakete:
sudo apt-get install recode
Oder mit apturl installieren, Link: apt://recode
Die allgemeine Syntax von recode lautet:
recode [OPTIONEN] ZEICHENSATZ DATEI
recode kennt recht viele Möglichkeiten, wie und wann in welchen Zeichensatz kodiert wird. Daher werden hier nur die gängigsten Möglichkeiten vorgestellt.
einige Optionen von recode | |
Option | Beschreibung |
-l | alle bekannten Zeichensätze ausgeben |
-d | es werden nur Akzente und Umlaute umkodiert, sehr praktisch z.B. bei HTML Dokumenten |
-f | Umkodierung forcieren, auch wenn diese nicht umkehrbar ist |
--help | zeigt alle Optionen und Möglichkeiten von recode an |
Eine ausführliche Einführung in die Möglichkeiten von recocde findet man auch in den Info-Seiten zu recode. Im Folgenden noch drei Beispiele zu recode:
Zeichensatz der Datei "Test.txt" nach UTF-8 konvertieren:
recode utf-8 Test.txt
Die Datei dostext mit Kodierung
ibmpc
in die Datei unixtext mit Kodierungutf-8
konvertieren:recode ibmpc..u8 < dostext > unixtext
Im dritten Beispiel wird die Kodierung nicht geändert (bleibt bei
latin1
), aber der Windows-Zeilenumbruch CR+LF wird in den unter Linux üblichen Umbruch CR konvertiert:recode latin1/cr-lf..latin1 < dostext > unixtext
convmv¶
Convmv dient im Gegensatz zu den bisher genannten Programm zur Umwandlung von Dateinamen. Dieses Programm wird über das folgende Paket installiert [1]:
convmv (universe)
Befehl zum Installieren der Pakete:
sudo apt-get install convmv
Oder mit apturl installieren, Link: apt://convmv
Alle Dateinamen im aktuellen Verzeichnis und Unterverzeichnissen von bspw. ISO-8859-15 nach UTF-8 werden mit folgenden Befehlen konvertiert:
Zum Testen rekursiven Konvertierens des aktuellen Ordners von ISO-8859-15 nach UTF-8:
convmv -f iso-8859-15 -t utf-8 -r .
Führt den oben getesteten Konvertierungsvorgang tatsächlich aus:
convmv -f iso-8859-15 -t utf-8 -r --notest .
Beim Datenaustausch mit DOS/Windows-Rechnern oder elektronischen Geräten wie Digitalkameras entstehen häufig unerwünschte Großschreibungen von Dateinamen oder Duplikate von Dateien, d.h. die gleiche Datei liegt sowohl mit einem Dateinamen in Groß- als auch in Kleinbuchstaben vor. Mit den Optionen --lower
und --replace
kann man eine Vereinheitlichung herbeiführen. Convmv ersetzt dabei nur inhaltsgleiche Dateien.
Rekursiv die Namen alle Dateien eines Verzeichnisbaums in Kleinbuchstaben wandeln und Duplikate entfernen, Schreibweise von Verzeichnisnamen beibehalten:
find /Pfad/zum/Dateibaum -type f -print0 | xargs -r -0 convmv --lower --replace --notest
h2rename¶
Eine Alternative zu convmv mit grafischer Oberfläche - gerade wenn man den ursprünglichen Zeichensatz nicht kennt, was bei "verhunzten" Dateinamen oft der Fall ist - ist das Programm H2rename. Aufgerufen wird das Programm per H2rename
(großes H) und außer einer Verzeichnisauswahl sind keine weiteren Einstellungen nötig.
fromdos / todos¶
Soll "nur" das Zeilenende von der typischen DOS-/Windows-Endung CR+LF (Wagenrücklauf) in die typische Linux-Endung LF geändert werden, bieten sich die kleinen Tools fromdos und todos an.
Diese werden über das folgende Paket installiert [1]:
tofrodos
Befehl zum Installieren der Pakete:
sudo apt-get install tofrodos
Oder mit apturl installieren, Link: apt://tofrodos
Die allgemeine Syntax lautet:
zum Konvertieren des Zeilenendes von Linux → DOS / Windows:
todos DATEI
zum Konvertieren des Zeilenendes von DOS / Windows → Linux:
fromdos DATEI
Beide Tools kennen einige (einfache) Optionen, welche man sich mit Hilfe von todos -h
bzw. fromdos -h
anzeigen lassen kann.
Achtung!
fromdos und todos eignen sich ausschließlich für 8-bit-Zeichensätze wie ASCII oder Latin, aber nicht für 16-bit-Zeichensätze wie UTF-8!
sed¶
sed (Unix Stream Editor) kann die Zeilenenden ebenfalls umwandeln. Die hier angegebenen Kommandos gelten für GNU SED und funktionieren dementsprechend unter Ubuntu. Weitere SED-Einzeiler, beispielsweise um unter DOS die Zeilenenden zu beeinflussen, findet man unter Nützliche, einzeilige Scripts für SED 🇩🇪.
DOS-Zeilenenden zu Unix-Zeilenenden
sed -i 's/\x0D$//' DATEI
Unix-Zeilenenden zu DOS-Zeilenenden
sed -i 's/$/\r/' DATEI
Konvertierung per Skript¶
Unter Skripte/Zeichensatzkonvertierung befindet sich ein Bash-Skript, um den richtigen Zeichensatz über ein im Text enthaltenes Wort zu finden, sowie Beispiele zum Konvertieren des Zeichensatzes mit Ruby, Python und Perl.
Links¶
Dateimanagement Programmübersicht
Ärger mit Umlauten und Problembehebung mit iconv 🇩🇪 - Vortrag Martin Neitzel (CLT 2015)