MudGuard: zeichenkette in unicode umwandeln

Beitrag lesen

Moin!

Hi,

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.

Richtig

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.

Guck mal sein anderes Posting, es geht wohl darum, email-Adressen für robots... unlesbar zu machen.

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.

Nicht richtig. Unicode kann in (mindestens) 2 Kodierungen vorkommen. UTF-8 und UTF-16.
Deine Beispiel-Bytefolge "abcdef" repräsentiert die Buchstaben a bis g, falls es sich um Unicode in der Formatierung UTF-8 handelt.
Bei UTF-16 wären das aber nur 3 Zeichen, aber welche genau, darfst Du selber aus den Tabellen raussuchen.

Unicode ist eine Zuordnung von Nummern zu Zeichen.
Wie diese Nummern dargestellt werden, ist aber etwas anderes (UTF-8/UTF-16/...)

Andreas