Perl多字节支持

时间:2012-03-07 18:07:07

标签: perl multibyte

我遇到这个问题,由于多字节字符,字符串值从函数返回时会发生变化。请考虑以下语句

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 æ­¡è¿&#142;ä¾&#134;å&#136;°é&#155;&#133;è&#153;&#142;! == &#27489;&#36814;&#20358;&#21040;&#38597;&#34382;!

1 个答案:

答案 0 :(得分:2)

嗯......是的。大多数函数(包括Encode::encode_utf8)的目的是更改输入的值。 Encode::encode_utf8的输入可能包含宽字符(其中ord($char) > 255),但输出始终为字节字符串(其中ord($char) <= 255对于每个字符都为真字符串)。

您难以置信的部分问题是您的第一个示例输出

#prints charEncoding string val = &#27489;&#36814;&#20358; ...

您建议Encode::encode_utf8的输出包含宽字符。你应该仔细检查那部分。