Thursday, October 16, 2008

(7)在Ruby中使用Unicode

Ruby1.9中对双引号字符提供了Unicode支持\u,\u关键字后跟随的是4位16进制的字符(字母不区分大小写):

"\u00D7" # => "x": 前面的0可以被省略
"\u20ac" # => "€": 小写字母也是可以的

第二种方式是使用\u{}的形式,括号中的十六进制字符可以是1到6个:
"\u{A5}"      # => "¥": 等同于 "\u00A5"
"\u{3C0}" #返回希腊字母 派 : 等同于 "\u03C0"
"\u{10ffff}" # 最大的 Unicode 字符

使用\u{}的另一个优势是,可以在一个{}中嵌入多个十六进制字符,它们之间用空格分开:
money = "\u{20AC A3 A5}"  # => "€£¥"

如你所见,{}之间的空格被忽略了,如果你确实需要空格可以使用ASCII 20:
money = "\u{20AC 20 A3 20 A5}"  # => "€ £ ¥"

值得注意的是,如果你想使\u有效,那么你的源文件必须是utf-8的,如果你使用其它编码格式,那么\u是无效的。而且\u模式不仅仅可以用于双引号字符串中,还可以用于正则表达式,但是如果你是Java程序员,你可能注意到了,Ruby中的\u是不能用于标识符的。

No comments: