Thread use utf8 und Verhalten von String-Operationen
(65 answers)
Opened by rosti at 2011-08-03 19:16 2011-08-02T17:51:12 rosti 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 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: Wie frage ich & perlintro brian's Leitfaden für jedes Perl-Problem |