为什么硬编码的阿拉伯字母与 Unicode 代码点的值不同

问题描述 投票:0回答:1

我得到了这段代码来处理阿拉伯语文本,它演示了我的问题:


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)。 看来我在编码时不能使用硬编码的阿拉伯语,但我使用了文本文件,它们有具有正确值的字母。

linux perl unicode
1个回答
0
投票

您缺少

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";
© www.soinside.com 2019 - 2024. All rights reserved.