我遇到这个问题,由于多字节字符,字符串值从函数返回时会发生变化。请考虑以下语句
print "charEncoding string val = " . $enc->($val) . "\n\n";
#prints charEncoding string val = 歡迎來到雅虎!
my $encoded = $enc->($val); <---- $encoded is not same as $enc->($val).
print "\n charEncodingo $encoded == $val " ;
#prints charEncodingo æ¡è¿Žä¾†åˆ°é›…虎! == 歡迎來到雅虎!
答案 0 :(得分:2)
嗯......是的。大多数函数(包括Encode::encode_utf8
)的目的是更改输入的值。 Encode::encode_utf8
的输入可能包含宽字符(其中ord($char) > 255
),但输出始终为字节字符串(其中ord($char) <= 255
对于每个字符都为真字符串)。
您难以置信的部分问题是您的第一个示例输出
#prints charEncoding string val = 歡迎來 ...
您建议Encode::encode_utf8
的输出包含宽字符。你应该仔细检查那部分。