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

the*_*gah 17 ruby string unicode utf-8

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

他们来了:

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

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

Cas*_*per 34

怎么样:

puts ["2B71F".hex].pack("U")
Run Code Online (Sandbox Code Playgroud)

编辑

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

puts "\u{2B71F}"
Run Code Online (Sandbox Code Playgroud)

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

  • 您也可以使用十六进制文字:`[0x2B71F] .pack'U'`. (3认同)

Oca*_*res 19

类似的unicode符号U+2B71F被称为a codepoint.

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

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

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

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

在这里,您很可能正在寻找将unicode转换codepointUTF-8字符的方法.

codepoint = "U+2B71F"
Run Code Online (Sandbox Code Playgroud)

您需要提取后面的十六进制部分U+并获得2B71F.这将是第一次集体捕获.看到这个.

codepoint.to_s =~ /U\+([0-9a-fA-F]{4,5}|10[0-9a-fA-F]{4})$/
Run Code Online (Sandbox Code Playgroud)

而你是UTF-8角色将是:

utf_8_character = [$1.hex].pack("U")
Run Code Online (Sandbox Code Playgroud)

参考文献:

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

  • 关于unicode,utf-8代码点,字符集,编码等的最佳答案之一我曾经在SO上阅读过......链接很棒.http://www.joelonsoftware.com/articles/Unicode.html特别适合. (2认同)