分类: PERL
2014-01-08 15:01:09
1.5.1 问题描述
程序代码中需要用Unicode中的名字来调用一些特殊字符而不用担心其编码
1.5.2 解决方案
在代码大开头加上use charnames ,接下来就可以在字符串常量中任意插入转义符“\N{CHARSPEC}了
1.5.3 讨论
使用 charnames 编译指示可以让你使用符号名称来代替Unicode的字符。\N{...}是静态常量也就是花括号内不能使用变量。常用的参数有以下几个,full和short。如果使用:full,那么对于\N{CHARNAME},字符CHARNAME会首先在所有的(标准的)Unicode名字库中寻找。此时名字要写完全(和库中的名字一样)。如果使用:short,short参数提供一个捷径。所有导入的名字只要不是冒号“:”开头,就会被视作脚本的名字,同时为这些脚本创作对应的快捷方式,这些快捷方式时不区分大小写的。另外如果参数是脚本的名字,那么CHARNAME就会作为一个字符,在给定的脚本中去寻找
use charnames ':full';
print "\N{GREEK CAPITAL LETTER DELTA} is called delta.\n";、
=>D is called delta.
use charnames ':short';
print "\N{greek:Delta} is an upper-case delta.\n";
=>D is an upper-case delta.
use charnames qw(cyrillic greek);
print "\N{Sigma} and \N{sigma} are Greek sigmas.\n";
=>S and s are Greek sigmas.
另外两个函数,charnames::viacode 和charnames::vianame,可以实现名字,和数字代码的转换。Unicode 的文档用符号U+XXXX来表示Unicode的代码为XXXX的字符:
use charnames qw(:full);
for $code (0xC4, 0x394) {
printf "Character U+%04X (%s) is named %s\n",
$code, chr($code), charnames::viacode($code);
}
=>Character U+00C4 (?) is named LATIN CAPITAL LETTER A WITH DIAERESIS
=>Character U+0394 (D) is named GREEK CAPITAL LETTER DELTA
use charnames qw(:full);
$name = "MUSIC SHARP SIGN";
$code = charnames::vianame($name);
printf "%s is character U+%04X (%s)\n",
$name, $code, chr($code);
=>MUSIC SHARP SIGN is character U+266F (#)
下面的路径是Perl里边Unicode字符的数据库的位置,在这个文件中你可以找到你需要的符号的名字
% perl -MConfig -le 'print "$Config{privlib}/unicore/NamesList.txt"'
1.5.4 其它
charnames请参阅 of Programming Perl的第31章; Unicode的字符库请参阅