Textdateien in Linux nach UTF-8 konvertieren

Foto des Autors

Die Zeichenkodierung UTF-8 ist in vielen Projekten der Standard, auf den man setzen sollte. Doch was tun, wenn manchen ältere Programmteile noch in einer anderen Kodierung vorliegen, wie ISO-8859 oder einem Windows-Zeichensatz?

Wenn Sie also zum Beispiel auf ein Skript stossen, bei dem die deutschen Umlaute falsch kodiert sind, dann müssen Sie den Zeichensatz umstellen.

falscher Zeichensatz
Im Kommentar sieht man die Auswirkung des falschen Zeichensatzes

Zwar unterstützen einige Editoren oder IDEs die Umwandlung einzelner Dateien. Die komplette Konvertierung eines ganzen Unterverzeichnisbaums mit allen Programmdateien wird aber fast nie angeboten.

Haben Sie Zugriff auf ein Linux-System können Sie alle Umwandlungen bequem einzeln oder auf einen Rutsch erledigen lassen.

So konvertieren Sie unter Linux einzelne Dateien

Recode ist ein Programm für die Linux-Shell, das sich eine Textdatei vornimmt, eine Zeichensatzumwandlung durchführt und die Ausgangsdatei mit der geänderten Version überschreibt.

Angenommen, Sie haben ein PHP-Skript namens myprog.php, das noch den Zeichensatz ISO-8859-1 (Latin-1) verwendet.

Mit folgender Zeile wandeln Sie dieses Skript in das Format UTF-8 um:

recode latin-1..utf-8 myprog.php

Alle von recode unterstützten Zeichensätze erhalten Sie per

recode -l

Kennen Sie die ursprüngliche Zeichenkodierung nicht, können Sie das Linux-Tool file verwenden, das Ihnen neben dem Dateityp auch die Kodierung verrät:

file myprog.php

Treten in einer Datei Umlaute oder Sonderzeichen aus mehreren Zeichensätzen vermischt auf, kann Ihnen recode allerdings nicht helfen und Sie müssen die Probleme von Hand in Ihrem Editor auflösen.

Werbung

So konvertieren Sie mehrere Dateien auf einmal

Recode selbst kann nicht mit mehreren Dateien umgehen. Zusammen mit dem Kommando find erhalten Sie aber eine Lösung, um mehrere Dateien innerhalb eines Verzeichnisbaums umzustellen.

Möchten Sie zum Beispiel alle PHP-Dateien im aktuellen Verzeichnis und seinen Unterordnern von Latin-1 nach UTF-8 konvertieren, dann schreiben Sie:

find . -name '*.php' -exec recode latin-1..utf-8 {} \;
Werbung
Foto des Autors

Markus Schraudolph

Markus ist IT-Fachjournalist der ersten Stunde. Seine ersten Texte veröffentlichte er 1987 beim legendären Markt&Technik-Verlag. Seine Spezialität sind Datenbanken und Microsoft Excel. Als PHP-Experte programmierte Markus maßgeblich die erste Version des Tippscout und ist anerkannter Experte für PHP, MySQL und Wordpress.