2

有人能告诉我为什么这个片段失败并出现以下错误吗?我也试过 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.
4

1 回答 1

5

首先,utf8::is_utf8不做你认为它做的事。它提供了有关字符串内部存储的详细信息,您无需检查任何内容

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

你可以使用

encode('UTF-16', decode_entities(decode('UTF-8', $foo)))
于 2013-04-05T17:14:19.797 回答