Sven Rautenberg: zeichenkette in unicode umwandeln

Beitrag lesen

Moin!

ich glaub schon gefunden zu haben, was ich suchte. die magischen befehle waren wohl odr/chr:

#!/usr/bin/perl -w

$string = "roger";
for($i=0; $i<length($string); $i++)
{
   $zeichen = substr($string, $i, 1);
   $ergebnis = $ergebnis."&#0".ord($zeichen).";";
}

Sorry, aber das, was du da machst, ist "Textverlängerung", kein Umwandeln in Unicode.

Du musst eine Zeichenkette _dann_ wandeln, wenn sie Bytes enthält, die in unterschiedlichen Zeichensätzen verschiedene Zeichen repräsentieren. Wenn du einen simplen String nur aus ASCII-Zeichen hast (alle Bytewerte kleiner als 127), dann brauchst du nichts umwandeln, weil die ersten 127 Zeichen in allen Zeichensätzen identisch belegt sind.

Und du wandelst ja auch gar nicht! Du ermittelst den Bytewert jedes einzelnen Zeichens und schreibst ihn als Zahlen-Entity - wie es zum Bytewert gekommen ist, wird nicht berücksichtigt. Das bedeutet: Wenn du als Eingabe Japanisch oder Russisch kriegst, und gleiche Bytewerte für verschiedene Zeichen stehen, dann geht die Zeicheninformation verloren! Hinterher kommt irgendein Zeichen raus, vielleicht ein deutscher Umlaut. Jedenfalls was falsches.

Unicode ist _nicht_ die &#0123;-Darstellung. Der String "abcdefg" ist schon Unicode (wenn dabeisteht, dass er Unicode sein soll), und er wird nei Programmen, die das auswerten, dafür sorgen, dass die Buchstaben von a bis g ausgegeben werden.

- Sven Rautenberg