zeichenkette in unicode umwandeln
Roger
- perl
0 MudGuard0 Roger
0 Roger
hallo zusammen!
mein subject sagt es schon. ich möchte am liebsten ohne module eine zeichenkette in unicode umwandeln.
geht das so ohne weiteres? ($]: 5.006)
thnx!
hallo zusammen!
Hi,
mein subject sagt es schon. ich möchte am liebsten ohne module eine zeichenkette in unicode umwandeln.
Dein Subject sagt aber nichts darüber aus, ob Du utf-8 oder utf-16 (oder sonst ein Format) erzeugen willst.
geht das so ohne weiteres? ($]: 5.006)
Ja, für Code-Umwandlungen reichen in der Regel einfache bit-/vergleichs-Operatoren und Grundrechenarten.
Wie das genau geht? Da mußt Du erstmal mitteilen, in welchem Format Dein Text vorliegt und in welchem Format Du ihn ausgeben willst.
Andreas
hallo zusammen!
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."�".ord($zeichen).";";
}
print "Content-type: text/html\n\n";
print "<html><head><title>Test</title></head><body>\n";
print $ergebnis."\n";
print "</body></html>\n";
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."�".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 {-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
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."�".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 {-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
Moin!
Unicode ist eine Zuordnung von Nummern zu Zeichen.
Wie diese Nummern dargestellt werden, ist aber etwas anderes (UTF-8/UTF-16/...)
yo, deswegen bin ich halt von "umwandeln" ausgegangen.
hätte mich in utf-8 ausdrücken sollen ;)
Andreas
Auflösung ;)
hier isses jetzt noch'n bischen besser erkennbar:
#!/usr/bin/perl -w
$string = 'roger_123@0815mail.de';
for($i=0; $i<length($string); $i++)
{
$zeichen = substr($string, $i, 1);
$ergebnis = $ergebnis."�".ord($zeichen).";";
}
$ergebnis_plain = $ergebnis;
$ergebnis =~ s/&/&/g;
print "Content-type: text/html\n\n";
print "<html><head><title>Test</title></head><body>\n";
print "Original:<br>".$string."<br>\n";
print "So wirds geschrieben:<br>".$ergebnis."<br>\n";
print "und so siehts aus:<br>".$ergebnis_plain."<br>\n";
print "</body></html>\n";
hauptsächlich möchte ichs für e-mail codierung nutzen. denke doch, dass es ausreicht...
[kann ich mir mal selber danken...]
Hi,
Auflösung ;)
hier isses jetzt noch'n bischen besser erkennbar:
#!/usr/bin/perl -w
$string = 'roger_123@0815mail.de';
for($i=0; $i<length($string); $i++)
{
$zeichen = substr($string, $i, 1);
$ergebnis = $ergebnis."�".ord($zeichen).";";
}
$ergebnis_plain = $ergebnis;
$ergebnis =~ s/&/&/g;
print "Content-type: text/html\n\n";
print "<html><head><title>Test</title></head><body>\n";
print "Original:<br>".$string."<br>\n";
print "So wirds geschrieben:<br>".$ergebnis."<br>\n";
print "und so siehts aus:<br>".$ergebnis_plain."<br>\n";
print "</body></html>\n";
hauptsächlich möchte ichs für e-mail codierung nutzen. denke doch, dass es ausreicht...
vielleicht sollte man noch anmerken, dass die voraussetzung für diesen code das vorliegen des quelltextes im zeichensatz iso-8859-1 ist. Bei einem anderen zeichensatz wird es nicht mehr funktionieren.
lg,
rob.