Perl многобайтовая поддержка - PullRequest
0 голосов
/ 07 марта 2012

Я столкнулся с этой проблемой, когда из-за многобайтовых символов значение строки изменяется при возврате из функции.

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 Ответ

2 голосов
/ 07 марта 2012

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...