转换十六进制字符串UTF-16 Perl内部表示

时间:2011-02-17 19:09:35

标签: perl unicode utf-16

我不知道为什么这段代码不起作用:

use strict;
use warnings;
use Encode qw/decode/;
my $entity_unicode = "00A0";
$entity_unicode = decode("UTF-16", pack('H4', $entity_unicode));
print $entity_unicode, "\n";

打印出:“UTF-16:/usr/lib/perl/5.10/Encode.pm第174行无法识别的BOM a0。”。

2 个答案:

答案 0 :(得分:3)

$entity_unicode = decode("UTF-16BE", pack('H4', $entity_unicode));

指定“UTF-16BE”而不仅仅是“UTF-16”将告诉它假设大端字节顺序。

请参阅How can I decode UTF-16 data in Perl when I don't know the byte order?

答案 1 :(得分:2)

在要解码的字符串的开头没有BOM(U + FEFF),无法知道00 A0是U + 00A0(UTF-16be)还是U + 0A00(UTF-16le,Windows使用) 。当BOM不存在时,必须指定确切的编码。在这种情况下,那是UTF-16be。