我有一个需求,需要使用内插法动态创建一个Unicode字符串。例如,请查看在irb中尝试的以下代码:
2.1.2 :016 > hex = 0x0905
=> 2309
2.1.2 :017 > b = "\u#{hex}"
SyntaxError: (irb):17: invalid Unicode escape
b = "\u#{hex}"
十六进制代码0x0905对应于DEVANAGARI LETTER A的独立元音的Unicode编码。
我无法弄清如何实现所需的结果。
我有一个需求,需要使用内插法动态创建一个Unicode字符串。例如,请查看在irb中尝试的以下代码:
2.1.2 :016 > hex = 0x0905
=> 2309
2.1.2 :017 > b = "\u#{hex}"
SyntaxError: (irb):17: invalid Unicode escape
b = "\u#{hex}"
十六进制代码0x0905对应于DEVANAGARI LETTER A的独立元音的Unicode编码。
我无法弄清如何实现所需的结果。
Integer#chr
方法:hex = 0x0905
hex.chr('UTF-8') #=> "अ"
如果设置Encoding::default_internal
为UTF-8,则可以省略该参数:
$ ruby -E UTF-8:UTF-8 -e "p 0x0905.chr"
"अ"
'' << hex #=> "अ"
字符串插值发生在 Ruby 解码转义之后,因此您尝试执行的操作会被 Ruby 解释为不完整的转义。
要从数字创建 Unicode 字符,您需要使用 pack
:
hex = 0x0905
[hex].pack("U")
=> "अ"