Thread CGI decode-encode Frage (4 answers)
Opened by Kuerbis at 2011-08-22 11:19

rosti
 2011-08-22 21:13
#151746 #151746
User since
2011-03-19
3492 Artikel
BenutzerIn
[Homepage]
user image
hi,

die param()-Methode liefert Bytes:

Code (perl): (dl )
$bytes = $cgi->param('input');


das können, utf-8-kodierte Zeichen sein oder anders kodierte Zeichen. Perl kennt an dieser Stelle keine Kodierung sondern nur Bytes.

Wenn Du das wieder ausgeben willst, Richtung Webserver, STDOUT erwartet auch Bytes.

Sobald du jedoch Perl mitteilst, das der String in $bytes _utf-8-kodierte_ Zeichen sind, wird $bytes Perl-Intern als SvUTF8 repräsentiert (Encode.pm).

In dem Moment, wo Du das auf STDOUT schickst, werden die Zeichen verstümmelt. Abhilfe: Der IOLayer muss einen Tag bekommen, dann ist die Darstellung korrekt:

Code (perl): (dl )
1
2
3
binmode STDOUT, ':utf8';  
print STDOUT $utf8_kodierte_Zeichenkette;
# Darstellung ok


--Rosti

View full thread CGI decode-encode Frage