我从一个Unicode数据库中得到了这些值,但我不确定如何将它们转换为易于人类阅读的形式。它们通常被称为什么?
这就是这些值:
U+2B71F
U+2A52D
U+2A68F
U+2A690
U+2B72F
U+2B4F7
U+2B72B
我该如何将它们转换成可读的符号?
如何:
# Using pack
puts ["2B71F".hex].pack("U")
# Using chr
puts (0x2B71F).chr(Encoding::UTF_8)
在 Ruby 1.9+ 版本中,你还可以这样做:
puts "\u{2B71F}"
即\u{}
转义序列可用于解码Unicode代码点。
[0x2B71F].pack 'U'
。 - Andrew MarshallU+2B71F
)被称为“代码点”。Unicode系统为世界各语言、科学符号、货币等中的每个字符定义了一个独特的“代码点”。该字符集不断增长。例如,U+221E
代表无穷大。这些“代码点”是十六进制数。每个字符始终仅定义一个数。有许多方法将其排列在内存中,这称为“编码”,常见的编码方式为UTF-8和UTF-16。转换过程是明确定义的。在这里,您最可能想要将Unicode“代码点”转换为UTF-8字符。codepoint = "U+2B71F"
你需要提取在U+
后面的十六进制部分,只获取2B71F
。 这将是第一个捕获组。查看此链接。codepoint.to_s =~ /U\+([0-9a-fA-F]{4,5}|10[0-9a-fA-F]{4})$/
那么您的UTF-8字符将是:
utf_8_character = [$1.hex].pack("U")
参考资料:
codepoint
是 "U+2B71F"。为了从中提取出 "2B71F",我使用了一个 Unicode 正则表达式进行匹配。在正则表达式中定义了一个用于提取 "2B71F" 的组。匹配后,如果存在这个组,你可以通过 $1 来引用它。[点击此 rubular 链接查看正则表达式的实际应用。] (http://rubular.com/r/fXocVSS7ZS) - Ocaj Nires