[[Vorlage(getestet, general)]] {{{#!vorlage Wissen [:Pakete_installieren: Installation von Programmen] [:Terminal: Ein Terminal öffnen] }}} [[Inhaltsverzeichnis(2)]] Im Computerbereich gibt es eine Vielzahl von [wikipedia:Zeichensatz: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 [wikipedia:UTF-8:] vs. [wikipedia: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. {{{#!vorlage 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 [:Editor:Editoren] bieten die Möglichkeit der Zeichensatz-Konvertierung und / oder Änderung des Zeichens für das Zeilenende. == Gedit == [: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. {{{#!vorlage 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 [http://vimdoc.sourceforge.net/htmldoc/mbyte.html#encoding-values hier] {en} 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. [[Anker(iconv)]] == iconv == '''iconv''' ist in der Standardinstallation von Ubuntu enthalten. Die allgemeine Syntax von iconv lautet [2]: {{{#!vorlage Befehl iconv [OPTIONEN] DATEI }}} wobei der gängigste Aufruf wahrscheinlich dieser ist: {{{#!vorlage Befehl iconv -f Zeichensatz1 -t Zeichensatz2 Ausgangsdatei -o Zieldatei }}} iconv kennt dabei die folgenden Optionen: ||<-2 rowclass="titel">'''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. [[Anker(recode)]] == 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: {{{#!vorlage Paketinstallation recode }}} Die allgemeine Syntax von recode lautet: {{{#!vorlage Befehl 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. ||<-2 rowclass="titel">'''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:Info-Seiten] zu recode. Im Folgenden noch drei Beispiele zu recode: 1. Zeichensatz der Datei "Test.txt" nach UTF-8 konvertieren: {{{#!vorlage Befehl recode utf-8 Test.txt }}} 1. Die Datei '''dostext''' mit Kodierung `ibmpc` in die Datei '''unixtext''' mit Kodierung `utf-8` konvertieren: {{{#!vorlage Befehl recode ibmpc..u8 < dostext > unixtext }}} 1. 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: {{{#!vorlage Befehl recode latin1/cr-lf..latin1 < dostext > unixtext }}} [[Anker(convmv)]] == convmv == Convmv dient im Gegensatz zu den bisher genannten Programm zur Umwandlung von Dateinamen. Dieses Programm wird über das folgende Paket installiert [1]: {{{#!vorlage Paketinstallation convmv, universe }}} 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: {{{#!vorlage Befehl convmv -f iso-8859-15 -t utf-8 -r .}}} * Führt den oben getesteten Konvertierungsvorgang tatsächlich aus: {{{#!vorlage Befehl 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: {{{#!vorlage Befehl find /Pfad/zum/Dateibaum -type f -print0 | xargs -r -0 convmv --lower --replace --notest }}} [[Anker(h2rename)]] == 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. [[Anker(tofrodos)]] == fromdos / todos == Soll "nur" das Zeilenende von der typischen DOS-/Windows-Endung CR+LF ([wikipedia: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]: {{{#!vorlage Paketinstallation tofrodos }}} Die allgemeine Syntax lautet: * zum Konvertieren des Zeilenendes von Linux -> DOS / Windows: {{{#!vorlage Befehl todos DATEI}}} * zum Konvertieren des Zeilenendes von DOS / Windows -> Linux: {{{#!vorlage Befehl fromdos DATEI }}} Beide Tools kennen einige (einfache) Optionen, welche man sich mit Hilfe von `todos -h` bzw. `fromdos -h` anzeigen lassen kann. {{{#!vorlage Warnung 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! }}} [[Anker(sed)]] == 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 [http://sed.sourceforge.net/sed1line_de.html Nützliche, einzeilige Scripts für SED] {de}. DOS-Zeilenenden zu Unix-Zeilenenden {{{#!vorlage Befehl sed -i 's/\x0D$//' DATEI }}} Unix-Zeilenenden zu DOS-Zeilenenden {{{#!vorlage Befehl 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 = * [:Sonstige_Software#Dateimanagement:Dateimanagement] {Übersicht} Programmübersicht * [youtube:poR29XaO3T8:Ärger mit Umlauten und Problembehebung mit iconv] {de} - Vortrag Martin Neitzel (CLT 2015) # tag: Büro, Shell, Übersicht, Dateimanagement