我希望使用Ruby将代码点转换为易于在Unicode引用中查找的值。
我知道我可以使用String#codepoints
,("a".codepoints => [97]
)来获取代码点,但我希望通过几种方法输出以下内容,让我们称之为convert_unicode
,{{ 1}}和convert_unicode_to_hex
为了这个问题:
convert_unicode_to_codepoints
我尝试使用character = "a"
character.codepoints => [97]
convert_unicode("97") => "U+0061"
convert_unicode_to_hex("U+0061") => 0x61
convert_unicode_to_codepoints("U+0061") => 97
,但在添加0的填充时遇到了麻烦,因为另一个我希望这个工作的unicode示例是97.to_s(16)
。你会如何处理这个问题?
答案 0 :(得分:1)
使用String#rjust
:
[97, 127016].map { |i| "U+" << i.to_s(16).upcase.rjust(4, '0') }
#⇒ ["U+0061", "U+1F028"]
其他操作:
"U+0061"[/(?<=\AU\+).*/].to_i(16)
#⇒ 97
"U+0061"[/(?<=\AU\+).*/].prepend('0x')
#⇒ "0x0061"
注意: 0x61
可能仅作为字符串存在,因为0x61
和97
在内部是相同的值,均由97
表示。
答案 1 :(得分:1)
您可以使用format
:
format('U+%04X', 97) #=> "U+0061"
format('U+%04X', 127016) #=> "U+1F028"
U+
字面解释%
格式序列的开始0
使用零填充4
最小宽度为4个字符X
将参数转换为大写十六进制数