Struppi: Character Set TroubleShooting

Beitrag lesen

Und bis auf den letzten Link geht keiner der von dir gelinkten Artikel das Problem auf umfassendere Weise an. Jeder Artikel verblieb in seinem Bereich und schaute nicht über den Tellerrand (z.B. auf die Konsequenzen in Perl oder PHP).

Da ich nun wieder zu Hause bin komnnte ich mich auch nochmal mit dem Thema beschäftigen. Wie schon gesagt, ich hatte die Kompetenz dazu bei dir vermutet und war aufgrund dessen verwundert über deine Aussage.

Das du mich dann persönlich angehst verwundert mich noch mehr, da ich dich seit gut 10 Jahren hier lese, ebenso wie deinen Blog und eigentlich immer geschätzt hatte. Anscheinend hab ich dir mal was getan oder was auch immer. Egal.

Zum Artikel

Die Aussage:

In Perl-Scripts, die in utf-8 gespeichert sind, sollten folgende Zeile enthalten:

use utf8;

Damit wird bereits dem Perl-Interpreter signalisiert, dass die Datei utf-8-codiert vorliegt. Andererseits gibt der Interpreter eine Fehlermeldung aus, wenn eine print-Anweisung Umlaute enthält:

Malformed UTF-8 character (1 byte, need 6) at...

Das passiert zumindest bei mir (Perl 5.10) nicht. Nur wenn ich eine ANSI kodierte Zeichenkette ausgebe und das Pragma utf8 verwende, dann erhalte ich: Wide character in print at test.pl line xxx.

Auch führt keine derartige Meldung zu einem 500'ern Fehler im Browser. Die häufigste Ursache für einen 500'er Fehler ist ein fehlerhafter Header, der z.b. durch eine Warnung, wie die obige, verursacht wird. Allerdings hat das ganze nur indirekt mit der Zeichenkodierung zu tun. Denn der Fehler im Browser würde nicht auftreten, wenn die Warnungen nicht ausgegeben werden oder wenn der header zuvor ausgegeben wird.

Daneben ist aber die ganze Aussage auch falsch, da use utf8 die Ausgabe verändert, d.h. die Zeichen werden falsch ausgeben.
mit use utf8; und ohne

Insofern ist deine Aussage, der Artikel ist richtig gut (weil er über den Tellerrand nach Perl schaut), eigentlich richtig schlecht, da er genau dort falsch ist.

Aber Rolf will den Artikel ja sowieso überarbeiten.

Der Abschnitt darüber, "CGI-Skripts" ist zumindest schwer mißverständlich. Denn dem Ausgabe Befehlen ist es egal in welcher Kodierung ein Skript abgespeichert wurde. print oder echo senden die Zeichenkette so wie sie da stehen (zumindest ohne use utf8). Daher kann man auch ohne Probleme eine utf-8 Seite mit einem Skript, dass in ISO abgespeichert wurde erstellen. In dem Skript sind die Zeichenketten dann eben u.U. nicht lesbar oder sie kommen von einer externen (in utf-8 kodierten) Quelle, z.b. einer Datenbank.

und ich muss mich ausdrücklich nochmal entschuldigen, wenn ich fälschlicherweise davon ausging, dass du so etwas bemerken könntest. Ich wollte nicht deinen Unmut erregen, zumal ich - wie gesagt - bisher dein Tun immer geschätzt hatte.

Struppi.