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

时间:2011-08-07 23:30:00

标签: ruby string unicode utf-8

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

他们是:

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

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

2 个答案:

答案 0 :(得分:34)

怎么样:

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

修改

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

puts "\u{2B71F}"

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

答案 1 :(得分:19)

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

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

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

codepoints是十六进制数字。每个字符始终只有一个数字。

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

在这里,您很可能希望将unicode codepoint转换为UTF-8个字符。

codepoint = "U+2B71F"

您需要提取U+之后的十六进制部分,并仅获取2B71F。这将是第一次集体捕获。 See this

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. Convert Unicode codepoints to UTF-8 characters with Module#const_missing
  2. Tim Bray on the goodness of unicode
  3. Joel Spolsky - The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)
  4. Dissecting the Unicode regular expression