【发布时间】:2015-11-16 03:53:13
【问题描述】:
我正在准备一个脚本来对用外国脚本编写的字符进行成对比较,我想从目标单词中提取单个字符进行比较。
当地址 > 256 的字符被硬编码到脚本中时,unpack 正确确定地址:例如,U+0268(=616 十进制)(LATIN SMALL LETTER I WITH STROKE)的序列后跟修饰符 U+0301 (=769 十进制)(COMBINING ACUTE ACCENT)被正确解析(第一个 MWE)。
但是,从命令行或外部文本文件,解析是按字节完成的。因此,我得到的不是 616,而是 (201,168),而不是 769,我得到的是 (204,129)。在两个字节的情况下,通常是 X→(d1,d2),其中 X=64×(d1−194)+d2。 (第二个 MWE)。
$ perl -e 'use utf8; @a= unpack("U*","fɨ́kà"); print "@a\n";'
102 616 769 107 97 768
(fɨ́kà)
$ echo 'use utf8; @a=unpack("U*",$ARGV[0]); print "@a\n";' | perl - fɨ́kà
102 201 168 204 129 107 97 204 128
(fÉ¨Ì kaÌ€)
我可以做些什么来让第二个 MWE 正常工作吗?后处理使 (201,168) → (616) 显得过于粗糙。该脚本正在从 bash shell 运行。
$ echo $BASH_VERSION
4.3.30(1)-release
This is perl 5, version 20, subversion 2 (v5.20.2) built for x86_64-linux-gnu-thread-multi
(with 39 registered patches, see perl -V for more detail)
【问题讨论】: