在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-8
和UTF-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")
参考文献:
- 使用Module#const_missing将Unicode代码点转换为UTF-8字符 。
- 蒂姆布雷关于unicode的善意 。
- Joel Spolsky – 每个软件开发人员的绝对最低限度,绝对必须知道Unicode和字符集(没有借口!) 。
- 解析Unicode正则表达式