613 Stimmen

Wie konvertiere ich Textdateien am besten zwischen Zeichensätzen?

Welches ist das schnellste und einfachste Werkzeug oder Verfahren zur Konvertierung von Textdateien zwischen Zeichensätzen?

Konkret muss ich von UTF-8 nach ISO-8859-15 und umgekehrt konvertieren.

Alles ist möglich: Einzeiler in Ihrer bevorzugten Skriptsprache, Befehlszeilentools oder andere Dienstprogramme für Betriebssysteme, Websites usw.

Die bisher besten Lösungen:

Unter Linux/UNIX/OS X/cygwin:

  • Gnu ikonv vorgeschlagen von Troels Arvin wird am besten verwendet als Filter . Es scheint allgemein verfügbar zu sein. Beispiel:

      $ iconv -f UTF-8 -t ISO-8859-15 in.txt > out.txt

    Wie von Ben gibt es eine Online-Konverter mit iconv .

  • umschreiben. ( Handbuch ) vorgeschlagen von Cheekysoft konvertiert eine oder mehrere Dateien an Ort und Stelle . Beispiel:

      $ recode UTF8..ISO-8859-15 in.txt

    Dieser verwendet kürzere Aliasnamen:

      $ recode utf8..l9 in.txt

    Recode unterstützt auch Oberflächen die zur Konvertierung zwischen verschiedenen Zeilenendentypen und Kodierungen verwendet werden kann:

    Wandelt Zeilenumbrüche von LF (Unix) in CR-LF (DOS) um:

      $ recode ../CR-LF in.txt

    Base64 kodierte Datei:

      $ recode ../Base64 in.txt

    Sie können sie auch kombinieren.

    Konvertiert eine Base64-kodierte UTF8-Datei mit Unix-Zeilenenden in eine Base64-kodierte Latin-1-Datei mit Dos-Zeilenenden:

      $ recode utf8/Base64..l1/CR-LF/Base64 file.txt

Unter Windows mit Powershell ( Jay Bazuzi ):

  • PS C:\> gc -en utf8 in.txt | Out-File -en ascii out.txt

(Allerdings wird ISO-8859-15 nicht unterstützt; es werden die Zeichensätze unicode, utf7, utf8, utf32, ascii, bigendianunicode, default und oem unterstützt).

bearbeiten

Meinen Sie die Unterstützung von iso-8859-1? Die Verwendung von "String" bewirkt dies z. B. für den umgekehrten Fall

gc -en string in.txt | Out-File -en utf8 out.txt

Hinweis: Die möglichen Aufzählungswerte sind "Unknown, String, Unicode, Byte, BigEndianUnicode, UTF8, UTF7, Ascii".

1 Stimmen

Intenté gc -en Ascii readme.html | Out-File -en UTF8 readme.html aber es konvertiert die Datei in utf-8, aber dann ist sie leer! Notepad++ sagt, dass die Datei im Ansi-Format ist, aber wenn ich es richtig verstanden habe, ist das nicht einmal ein gültiger Zeichensatz? uk.answers.yahoo.com/question/index?qid=20100927014115AAiRExF

2 Stimmen

Ich bin gerade auf der Suche nach einer Antwort auf eine verwandte Frage auf diesen Artikel gestoßen - tolle Zusammenfassung! Ich dachte nur, es lohnt sich, das hinzuzufügen recode fungiert auch als Filter, wenn Sie ihm keine Dateinamen übergeben, z. B.: recode utf8..l9 < in.txt > out.txt

1 Stimmen

iconv.com/iconv.htm scheint für mich gestorben zu sein? (Zeitüberschreitung)

18voto

Arne Evertsson Punkte 19213

Versuchen Sie die Bash-Funktion iconv

Ich habe dies in .bashrc :

utf8()
{
    iconv -f ISO-8859-1 -t UTF-8 $1 > $1.tmp
    rm $1
    mv $1.tmp $1
}

um Dateien wie diese konvertieren zu können:

utf8 MyClass.java

18voto

Jeremy Glover Punkte 507

Versuchen Sie Notepad++

Unter Windows konnte ich Notepad++ verwenden, um die Konvertierung von ISO-8859-1 a UTF-8 . Klicken Sie auf "Encoding" und dann "Convert to UTF-8" .

17voto

Serge Stroobandt Punkte 23731

Oneliner mit Suchfunktion und automatischer Zeichensatzerkennung

Die Zeichenkodierung aller passenden Textdateien wird automatisch erkannt und alle passenden Textdateien werden in utf-8 Kodierung:

$ find . -type f -iname *.txt -exec sh -c 'iconv -f $(file -bi "$1" |sed -e "s/.*[ ]charset=//") -t utf-8 -o converted "$1" && mv converted "$1"' -- {} \;

Um diese Schritte durchzuführen, muss eine Sub-Shell sh wird verwendet mit -exec einen Einzeiler mit der Option -c Flagge und die Übergabe des Dateinamens als Positionsargument "$1" con -- {} . Dazwischen ist die utf-8 Ausgabedatei wird vorübergehend benannt converted .

Wobei file -bi bedeutet:

  • -b , --brief Den Ausgabezeilen keine Dateinamen voranstellen (Kurzmodus).

  • -i , --mime Bewirkt, dass der Dateibefehl Mime-Typ-Zeichenfolgen ausgibt und nicht die herkömmlichen, für den Menschen lesbaren Zeichenfolgen. So kann es zum Beispiel heißen text/plain; charset=us-ascii statt ASCII text . En sed Befehl reduziert dies auf nur us-ascii wie es erforderlich ist für iconv .

En find ist für eine solche Automatisierung der Dateiverwaltung sehr nützlich. Klicken Sie hier für mehr find in Hülle und Fülle .

8voto

Unter der Annahme, dass Sie die Eingabekodierung nicht kennen und dennoch den größten Teil der Konvertierung automatisieren möchten, kam ich zu folgendem Schluss Einzeiler aus der Zusammenfassung der bisherigen Antworten.

iconv -f $(chardetect input.text | awk '{print $2}') -t utf-8 -o output.text

5voto

lalthomas Punkte 422

DOS/Windows: verwenden Sie Code-Seite

chcp 65001>NUL
type ascii.txt > unicode.txt

Befehl chcp kann verwendet werden, um die Codepage zu ändern. Codepage 65001 ist der Microsoft-Name für UTF-8. Nach dem Einstellen der Codepage wird die Ausgabe, die durch die folgenden Befehle erzeugt wird, der eingestellten Codepage entsprechen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X