2012-03-07 2 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

+0

Это Perl, в случае, если я пропустил, сказав, что и $ enc === Encode :: encode_utf8 –

+1

У Perl нет многобайтового кода. У него есть символы. – tchrist

ответ

2

Ну ... да. Назначение большинства функций, включая Encode::encode_utf8, заключается в изменении значения входа. Вход в Encode::encode_utf8 может содержать широкие символы (где ord($char) > 255), но выход всегда является байтовой строкой (где ord($char) <= 255 истинно для каждого символа в строке).

Часть вашего вопроса, что трудно поверить, это ваш первый пример вывода,

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

где вы предлагаете, что выход Encode::encode_utf8 содержал широкие символы. Вы должны дважды проверить эту часть.

Смежные вопросы