Chinaunix首页 | 论坛 | 博客
  • 博客访问: 26963
  • 博文数量: 13
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 130
  • 用 户 组: 普通用户
  • 注册时间: 2014-01-05 16:13
文章分类
文章存档

2016年(1)

2014年(12)

我的朋友

分类: PERL

2014-01-08 15:01:09

1.5.1 问题描述

程序代码中需要用Unicode中的名字来调用一些特殊字符而不用担心其编码

1.5.2 解决方案

在代码大开头加上use charnames ,接下来就可以在字符串常量中任意插入转义符“\N{CHARSPEC}

1.5.3 讨论

使用 charnames 编译指示可以让你使用符号名称来代替Unicode的字符。\N{...}是静态常量也就是花括号内不能使用变量。常用的参数有以下几个,fullshort。如果使用:full,那么对于\N{CHARNAME},字符CHARNAME会首先在所有的(标准的)Unicode名字库中寻找。此时名字要写完全(和库中的名字一样)。如果使用:shortshort参数提供一个捷径。所有导入的名字只要不是冒号“:”开头,就会被视作脚本的名字,同时为这些脚本创作对应的快捷方式,这些快捷方式时不区分大小写的。另外如果参数是脚本的名字,那么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的字符库请参阅

阅读(484) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~