Perl - Konvertierung von Daten aus UTF-8 für Windows

Verschiedene Windows-Tools haben so ihre Probleme mit UTF-8 kodierten Daten. Für ein deutsches Windows könnte man dann auf die Idee kommen, die mit Perl generierten Daten aus UTF-8 z.B. in "CP1252" zu konvertieren und gleich so zu speichern. Dazu kann das Standardmodul "Encode" benutzt werden. Laut Dokumentation bietet dasw Modul u.a. eine recht nützliche Funktion namenx from_to() an. Leider schweigt sich die Dokumentation (siehe "perldoc Encode") darüber aus, das diese Funktion nur verfügbar ist, wenn Encode mit dem Tag :all importiert wird. Glücklicherweise liefert "perldoc -m Encode" ja den Quelltext des Moduls, und wenn man dann noch weiß, auf was man achten muss... Damit kann man folgendes Beispiel konstruieren:
use Encode qw/:all/;
 
## Daten besorgen
$data="SOME UTF-8 ENCODED DATA";
 
## Drauf vertrauen das die Daten wirklich UTF-8 Daten sind und diese in
## cp1252 (das Windows Pendant von Latin-1) wandeln...
from_to($data, "utf-8", "cp1252");
 
## ... und ausgeben
print $data."\n";
In diesem Beispiel enthält $data UTF-8 kodierte Daten, die mittels Aufruf von from_to nach CP1252 konvertiert werden. Zu Beachten ist, das from_to die Übergebenen Daten in-Place verändert, also die konvertierten Daten direkt in $data schreibt. Ist diese in-Place Änderung nicht sinnvoll, so bietet das Modul auch die Operationen encode() und decode() an, die die Übergabeparamter nicht verändern.

Trackback URL for this post:

http://www.rdoering.net/trackback/29