= 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

[{Tag Perl}]