2012-03-07 93 views
-2

我面对这个问题,即由于多字节字符从function.Please时返回字符串值的变化考虑下面的语句Perl的支持多字节

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;! 
+0

'$ enc'是什么? '$ val'和'$ enc - >($ val)'之间有什么区别? – mob 2012-03-07 18:20:59

+0

这是Perl,万一我错过了说和$ enc === Encode :: encode_utf8 – 2012-03-07 18:30:57

+1

Perl没有多字节任何东西。它有字符。 – tchrist 2012-03-07 18:34:39

回答

2

嗯...是啊。大部分功能的用途,包括Encode::encode_utf8,都是为了改变输入的值。 Encode::encode_utf8的输入可能包含宽字符(其中ord($char) > 255),但输出始终为字节字符串(其中ord($char) <= 255对于字符串中的每个字符均为true)。

你的问题的一部分是很难相信是你的第一个样本输出,

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

,你认为的Encode::encode_utf8输出包含宽字符。你应该仔细检查那部分。