我得到了这段代码来处理阿拉伯语文本,它演示了我的问题:
my $noon = "ن";
my $code_point = charinfo(ord($noon))->{'code'};
print "Unicode code point for 'ن' (noon): U+$code_point\n";
$noon = "\N{U+0646}";
$code_point = sprintf("%04X", ord($noon));
print "Unicode code point for 'ن' (noon): U+$code_point\n";
$noon_code = 0x0646;
print (chr($noon_code), "\n");
打印出来:
Unicode code point for 'ن' (noon): U+00D9
Unicode code point for 'ن' (noon): U+0646
Wide character in print at code.pl line 11.
ن
价值观不同。我使用 Linux Mint 文本编辑器 (Xed)。 看来我在编码时不能使用硬编码的阿拉伯语,但我使用了文本文件,它们有具有正确值的字母。
您缺少
use utf8;
来告诉 Perl 您的脚本是使用 UTF-8(而不是 ASCII)编码的。
并且您没有对输出进行编码,这可以使用
use open ':std', ':encoding(UTF-8)';
来完成。
如果没有
use utf8;
,Perl 希望您的脚本使用 ASCII 进行编码。字符串文字是 8 位干净的,这意味着 0x80-0xFF 范围内的任何字节都保持原样。
您的脚本显然不是使用 ASCII 编码的。它似乎是使用 UTF-8 编码的。所以你的剧本真的很
my $noon = "\xD9\x86";