Perl UTF8到UTF16转换错误 - 宽字符

时间:2013-04-05 16:52:52

标签: perl unicode

有人可以告诉我为什么这个代码段失败并出现以下错误?我也试过了  在致电utf8::downgrade()之前from_to()没有成功。使用Perl 5.14.2。

任何想法??

代码:

use Encode qw(from_to);
use HTML::Entities;

$s = "มหั&#3624";
$foo = decode_entities($s);
print "is foo UTF8? ", utf8::is_utf8($foo), "\n";
from_to($foo, 'UTF-8', 'UTF-16');

输出:

is foo UTF8? 1
Cannot decode string with wide characters at /usr/lib/perl/5.14/Encode.pm line 194.

1 个答案:

答案 0 :(得分:5)

首先,utf8::is_utf8没有按照您的想法行事。它提供了有关字符串nothing you should ever need to check的内部存储的详细信息。

问题是您的字符串不是使用UTF-8编码的。它根本没有编码。 decode_entities都接受并返回一个解码后的字符串,即一串Unicode代码点。

您可以使用

encode('UTF-16', decode_entities(decode('UTF-8', $foo)))