使用Ruby为Unicode值生成十六进制代码点

时间:2018-05-04 11:06:20

标签: ruby unicode

我希望使用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)。你会如何处理这个问题?

2 个答案:

答案 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可能仅作为字符串存在,因为0x6197在内部是相同的值,均由97表示。

答案 1 :(得分:1)

您可以使用format

format('U+%04X', 97)     #=> "U+0061"
format('U+%04X', 127016) #=> "U+1F028"
  • U+字面解释
  • %格式序列的开始
  • 0使用零填充
  • 4最小宽度为4个字符
  • X将参数转换为大写十六进制数