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

使用Ruby为Unicode值生成十六进制代码点,ruby,unicode,Ruby,Unicode,我希望使用Ruby将代码点转换为易于在Unicode引用中查找的值 我知道我可以使用String#codepoints,(“a.codepoints=>[97])获得代码点本身,但我希望通过一些方法输出以下内容,为了解决这个问题,让我们称它们为convert_unicode,convert_unicode_to_hex,以及convert_unicode_to_codepoint>: character = "a" character.codepoints => [97] convert_

我希望使用Ruby将代码点转换为易于在Unicode引用中查找的值

我知道我可以使用
String#codepoints
,(
“a.codepoints=>[97]
)获得代码点本身,但我希望通过一些方法输出以下内容,为了解决这个问题,让我们称它们为
convert_unicode
convert_unicode_to_hex
,以及
convert_unicode_to_codepoint>:

character = "a"
character.codepoints => [97]
convert_unicode("97") => "U+0061"
convert_unicode_to_hex("U+0061") => 0x61
convert_unicode_to_codepoints("U+0061") => 97
我尝试使用
97.to_s(16)
,但在添加0的填充时遇到了麻烦,因为另一个unicode示例是
U+1F028
。您将如何处理此问题?

使用:

[97127016]。映射{i |“U+”使用:

[97127016]。映射{i |“U+”您可以使用:

  • U+
    逐字解释
  • %
    格式序列的开始
  • 0
    用零填充
  • 4
    最小宽度为4个字符
  • X
    将参数转换为大写十六进制数
您可以使用:

  • U+
    逐字解释
  • %
    格式序列的开始
  • 0
    用零填充
  • 4
    最小宽度为4个字符
  • X
    将参数转换为大写十六进制数

谢谢,这就是我要找的!谢谢,这就是我要找的!
[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"
format('U+%04X', 97)     #=> "U+0061"
format('U+%04X', 127016) #=> "U+1F028"