有人可以告诉我为什么这个代码段失败并出现以下错误?我也试过了
在致电utf8::downgrade()
之前from_to()
没有成功。使用Perl 5.14.2。
任何想法??
代码:
use Encode qw(from_to);
use HTML::Entities;
$s = "มหัศ";
$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.
答案 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)))