在Ruby中将unicode代码点转换为字符串字符

我从unicode数据库获得这些值,但我不确定如何将它们转换为人类可读的forms。 这甚至叫什么?

他们来了:

  • U+2B71F
  • U+2A52D
  • U+2A68F
  • U+2A690
  • U+2B72F
  • U+2B4F7
  • U+2B72B

如何将这些转换为可读符号?

怎么样:

 puts ["2B71F".hex].pack("U") 

编辑

在Ruby 1.9中,您甚至可以这样做:

 puts "\u{2B71F}" 

\u{}转义序列可用于解码Unicode代码点。

U+2B71F这样的unicode符号被称为codepoint

unicode系统为众多世界语言,科学符号,货币等中的每个字符定义唯一的codepoint 。这个字符集正在稳步增长。

例如, U+221E是无穷大。

codepoints是hex数字。 每个字符始终只有一个数字。

有许多方法可以在内存中进行排列。 这被称为encoding ,其常见的是UTF-8UTF-16 。 转换来回定义明确。

在这里,您最有可能寻找将unicode codepoint转换为UTF-8字符。

 codepoint = "U+2B71F" 

您需要提取U+之后的hex部分,并且只获得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") 

参考文献:

  1. 使用Module#const_missing将Unicode代码点转换为UTF-8字符 。
  2. 蒂姆布雷关于unicode的善意 。
  3. Joel Spolsky – 每个软件开发人员的绝对最低限度,绝对必须知道Unicode和字符集(没有借口!) 。
  4. 解析Unicode正则表达式