[[Vorlage(Getestet,general)]] {{{#!vorlage Wissen [:Terminal:Einen einen Terminal öffnen] [:Editor:Einen Editor öffnen] [:Rechte:Datei-Rechte ändern] }}} [[Inhaltsverzeichnis(3)]] Im folgenden findet man Skripte bzw. Einzeiler in verschiedenen [:Programmiersprache:Programmiersprachen], um den Zeichensatz einer Datei zu ändern. Die Dateien für die Skripte müssen gegebenfalls mit einem Editor[2] erstellt und dann ausführbar[3] gemacht werden. = Bash = In der Shell kann man dafür den Befehl '''iconv''' benutzen. Die iconv-Routinen werden mit dem Paket '''libc6''' installiert, sollten also auf allen Linux-Systemen vorhanden sein. Die Parameter `-f`(= "from") und `-t`(= "to") geben die Start- und Zielkodierung an. Normalerweise wird der konvertierte Text auf die Standardausgabe geschrieben. Zur Ausgabe in eine Datei setzt man die Option `-o`(= "output"). {{{#!vorlage Befehl iconv -f ISO-8859-15 -t UTF-8 -o utf8datei.txt isodatei.txt }}} Eine Liste der auf dem System bekannten Kodierungen erhält man mit dem Befehl {{{#!vorlage Befehl iconv -l }}} Der Befehl '''recode''' arbeitet ähnlich und ist nützlich, wenn man das konvertierte Ergebnis wieder in der ursprünglichen Datei speichern will. Wenn man das Encoding nicht kennt, aber weiß, dass ein bestimmtes Wort im Text vorkommt, dann kann man mit dem encoding-finder nach möglichen Encodings suchen - meist liefert das Script mehrere Kandidaten. {{{#!code bash #!/bin/bash # # encoding-finder.sh # (C) GPLv3, Stefan Wagner 2007 # # In einer Datei einen bekannten (Teil-)String (z.B.: Begrüßung) suchen, # indem alle Encodings ausprobiert werden. # [[ $# -ne 2 ]] && echo "Usage: encoding-finder.sh FILE PATTERN_WITH_UMLAUT_FOR_SURE_IN_FILE" && exit FILE=$1 PATTERN=$2 for enc in $( iconv -l | sed 's/..$//') do iconv -f $enc -t UTF-8 $FILE 2>/dev/null | grep $PATTERN && echo $enc done }}} = Ruby = Ruby stellt eine Wrapperklasse zur Verfügung. Zu beachten ist, dass die Konvertierungsroutine noch einmal mit `nil` als Parameter aufgerufen werden muss, da noch Zeichen im Puffer zurückgeblieben sein können. {{{#!code ruby require 'iconv' k = Iconv.new("UTF-8", "ISO-8859-15") utf8string = k.iconv(isostring) utf8string << k.iconv(nil) k.close }}} = Python = Bei Python 2.x hat jeder String eine "decode" Methode. Mit dieser kann man den String umwandeln, im folgenden Beispiel von Latin-1 nach UTF-8 {{{#!code python "Hier ist der umzuwandelnde Sting".decode("latin1").encode("utf-8") }}} = Perl = In Perl gibt es z.B. das Encode::Encoder Modul. {{{#!code perl #!/usr/bin/perl -w use strict; use Encode::Encoder qw(encoder); my $string = "Hello Wörld!"; print encoder($string)->iso_8859_1, "\n"; print encoder($string)->utf8->latin1, "\n"; #hin und zurück }}} # tag: Programmierung