Thread use utf8 und Verhalten von String-Operationen (65 answers)
Opened by rosti at 2011-08-03 19:16

pq
 2011-08-02 20:07
#150979 #150979
User since
2003-08-04
12207 Artikel
Admin1
[Homepage]
user image
2011-08-02T17:51:12 rosti
Das Verhalten von substr() wird vom pragma utf8 bestimmt.

nein, das verhalten von substr() wird davon bestimmt, in welcher kodierung die variable vorliegt.
das utf8-pragma wirkt sich nur auf strings aus, die direkt im script stehen. parameter, die man sich aus STDIN holt (bzw. aus CGI-parametern), sind erst einmal nicht dekodiert.

man bekommt aus dem url-parameter %C3%A4 (ä) mittels CGI den string \303\244.
substr($var, 0, 1) ergibt dann den string "\303". das ist kein ä mehr.

dekodiert man jedoch den parameter mit Encode::decode_utf8( $cgi->param(...) ), dann erhält man den string "\303\244" mit utf8-flag, der ist ins perl-interne format dekodiert worden.
sieht man an der ausgabe von Devel::Peek::Dump:
PV = 0xa1afd48 "\303\244"\0 [UTF8 "\x{e4}"]

jetzt arbeitet substr() korrekt, da "\303\244" als einzelner character betrachtet wird.

dasselbe gilt für andere funktionen und regexes.

Quote
Was genau meinst Du mit dekodieren?

http://perlgeek.de/de/artikel/charsets-unicode
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem

View full thread use utf8 und Verhalten von String-Operationen