2015-09-03 49 views
3

我知道我可以用\uNNNN转义序列转义Ruby中的基本Unicode字符。例如,对于笑脸U+263A(☺)我可以使用字符串文字"\u2603"用于补充平面Unicode字符的Ruby字符串转义

如何避免在basic multilingual plane之外超过U + FFFF的Unicode字符,如眨眼的脸:U+1F609(😉)?

在Java中使用代理对表单不起作用;它导致包含个人代理代码点无效的字符串:

s = "\uD83D\uDE09" # => "\xED\xA0\xBD\xED\xB8\x89" 
s.valid_encoding? # => false 

回答

1

您可以使用转义序列\u{XXXXXX},其中XXXXXX为1至6个十六进制数字:

s = "\u{1F609}" # => "" 

大括号还可以包含由单个空格或制表符分隔的多个运行以编码多个字符:

s = "\u{41f 440 438 432 435 442 2c 20 43c 438 440}!" # => "Привет, мир!" 

您也可以使用字节转义来编写包含该字符的UTF-8编码的文字,尽管这样做不是很方便,并且如果文件编码不同,并不需要导致UTF-8编码的字符串:

# encoding: utf-8 
s = "\xF0\x9F\x98\x89" # => "" 
s.length # => 1 

# encoding: iso-8859-1 
s = "\xF0\x9F\x98\x89" # => "\xF0\x9F\x98\x89" 
s.length # => 4 
相关问题