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


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

推荐答案

您说您提供了以下内容:

my $noon = "ن";

但是您实际上提供了两个字符0xD9和0x86,类似于以下内容:

my $noon = "\xD9\x86";

这是因为您告诉Perl该脚本是使用ASCII编码的.(不过,字符串和正则表达式文本是8位的,这意味着从0x80到0xFF的字节会产生具有这些值的字符.)但是脚本实际上是使用UTF-8编码的.您需要加上use utf8;才能告诉Perl这一点.

您还需要对输出进行编码,因为STDOUT默认需要字节.你可以使用use open ':std', ':encoding(UTF-8)';.

Linux相关问答推荐

为什么仅使用&i-i标志时仍会从容器进程中输出

如何在不使用LD_LIBRARY_PATH或RPATH的情况下运行链接到共享库的二进制文件?

如何将参数传递给Bash函数

Azure Linux B1s VM-Jenkins Sever已安装,但主页未打开

AWK 命令根据另一列中相同的值获取列中的不同值

Docker 默认使用交换文件吗?

在服务器目录之外启动 DolphinDB 服务器时出错

如何使用 Bash 将随机数据块写入文件

/usr/local/bin/ 中Collection的权限被拒绝

Bash 变量:是否区分大小写?

任何方式以编程方式在android上运行shell命令?

如何在 Linux 中命名线程?

Linux命令删除.git文件夹以外的所有文件?

php.ini 更改,但在 Ubuntu 上无效

将 CMake 项目导入 Eclipse CDT

try 使用 sudo 将文件附加到根拥有的文件时权限被拒绝

我可以告诉 Linux 不要换出特定进程的内存吗?

如何让我的 Golang Web 服务器在后台运行?

基于shell中正则表达式的 colored颜色 突出显示输出

在 Linux 上更新 PyCharm