Perl und Unicode #
Welcher Programmierer hat nicht schon halbe Tage damit zugebracht, irgendwelche Zeichensätze ineinander umzurechnen und am Ende doch wieder irgendwas falsch gemacht, weil ein Benutzer nicht nur Umlaute benutzt, sondern auf einmal auch noch das Euro-Zeichen eingibt...
Da dieses Problem nur im nicht-amerikanischen Sprachraum auftritt, ist es lange Zeit eher stiefmütterlich behandelt worden. Die Europäer (die wohl von Natur aus anpassungsfähiger sind), haben sich untergeordnet und die Asiaten wurden nicht gefragt. Nun - das asiatische Sprachen in der IT keine Rolle spielen, ist langsam vorbei und auch in Europäischen Programmierer-Köpfen hat es spätestens mit der Einführung des Euro auch langsam gefunkt. Deshalb scheint sich so ganz langsam die Erkenntnis durchzusetzen, daß der ganze Kram mit verschiedenen Codetabellen und länderspezifischen Zeichensätzen Humbug ist. Stattdessen ist Unicode angesagt! Dieser Zeichensatz enthält alle Zeichen, die es auf der Welt gibt und fertig!
Zur Darstellung von Unicode im Speicher (also zur Codierung, damit das Wort doch nicht ganz ausstirbt) wird im allgemeinen UTF-8 benutzt. diese Codierung hat den Vorteil, das ein ASCII-Text (der nur die unteren 7 Bit benutzt), nicht geändert wird. Lediglich nicht-ASCII-Zeichen (Umlaute, Euro, etc.) werden in mehr als einem Byte abgelegt.
Seit Perl 5.8.x ist die Unicode-Unterstützung recht gut gediehen. Nachdem ich etwas damit herumgedoktert habe, hier der richtige Weg: Wichtig ist, dass man sich - wenn irgend möglich - von allen anderen Codierungen komplett verabschiedet.
Quellcode in UTF8 #
Das fängt damit an, das der Quelltext in Unicode sein muss. Also einen Unicode-tauglichen Editor nehmen und entsprechend einstellen. Ich benutze kate (bzw. kwrite), den KDE-Editor. Dort sollte man im Menü "Einstellungen/Kate einrichten" und dann auf der Seite "Editor/Bearbeiten" die "Kodierung" auf "utf8" stellen.
Nun muss der Perl-Compiler allerdings wissen, was das für eine Datei ist, die er da liest. Dafür schreibt man nun
use utf8;
schön weit oben in sein Programm (da, wo sowieso immer "use strict" steht, nicht wahr?). Damit kann Perl die Datei des UTF8-Editors lesen.
spezielle Unicode-Zeichen im Quellcode angeben #
Was ist nun, wenn man keinen UTF8-Editor hat oder wenn man Zeichen darstellen will, die der Editor nicht kennt? Meinen Rechner habe ich z.B. immer noch nicht so konfiguriert bekommen, daß ich unter X das Euro-Zeichen benutzen kann. Was tun?
Man kann in jedem String mit z.B.
$preis="123,50 \N{20ac}";ein Unicode-Zeichen mit dem entsprechenden Zeichencode einfügen. Wunderbar! - denkt man da - Aber woher soll ich die Codes wissen und was bedeutet das für die Lesbarkeit meines Codes?!? Da gibt es natürlich noch eine hübschere Methode: Zuerstmal sucht man in /usr/share/perl/5.8.1/unicore/NamesList.txt sein Zeichen heraus. Dort steht z.B., das 20ac das EURO SIGN ist. Nun kann man entweder den Zahlenwert oben einfügen oder folgendes schreiben:
use charnames ':full'; ... $preis="123,50 \N{EURO SIGN}";
Lesen zum Thema: #
- perldoc utf8 - kurz und bündig
- perldoc perluniintro - Einführung ins Thema, sollte keiner verpassen
- perldoc unicode - Alles, was man eigentlich gar nicht wissen will
- perldoc perlrun - Der -C Schalter ist auch interessant
- /usr/share/perl/5.8.1/unicore/NamesList.txt - menschlich lesbare Liste der Unicode-Zeichen
- EncodingKonvertieren