Thread use utf8 und Verhalten von String-Operationen
(65 answers)
Opened by rosti at 2011-08-03 19:16
falsch.
warum willst du es immer wieder durchkauen? use utf8 verändert, wie variablen kodiert sind. substr entscheidet nur danach, wie variablen kodiert sind (abgesehen von use bytes). beweis: Code: (dl
)
1 $ perl -wE' was haben wir hier? einen string ä, der unter use utf8 in die variable $str geschrieben wurde. das erste substr arbeitet korrekt und sieht die 2 bytes als einen character. dann: $str = encode_utf8($str); ich behandle nun $str und kodiere ihn, so dass \303\244 ohne utf8-flag drinstehen. die beiden werden nun von perl als 2 voneinander getrennte bytes angesehen. in der folge liefert substr() auch nur die \303, was das ergebnis kaputt macht. ergo: use utf8 hat substr() hier nicht dazu gebracht, zeichenweise zu arbeiten, weil substr() sich nur am string selbst orientiert. substr() ist es schnurzpiepegal, ob oben irgendwo use utf8 steht. aber vermutlich begründest du das jetzt damit, dass unicode-unterstützung in perl ja noch in der entwicklung ist ;-) leider sparst du immer gerne mit beweisen. mein beweis ist ein komplettes kommandozeilen skript mit ausgabe. edit: und weils so schön war, hier noch der 2. gegenbeweis. mein erstes beispiel zeigt, dass ich use utf8 verwende, den string danach aber kodiere und substr() byteweise arbeitet, obwohl oben use utf8 steht. ich kehre das nun um und benutze use utf8, wende substr an und sage danach "no utf8"; laut deiner logik müsste "no utf8" plötzlich dafür sorgen, dass substr() byteweise arbeitet. tut es aber nicht: Code: (dl
)
1 $ perl -wE' Last edited: 2011-08-03 12:36:44 +0200 (CEST) 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 |