如何将一串全角整数字符解析为ruby中的整数

时间:2010-08-09 10:16:44

标签: ruby unicode

如何将一个fullwidth unicode integer characters字符串解析为ruby中的整数?

尝试显而易见的结果;

irb(main):011:0> a = "\uff11"
=> "1"
irb(main):012:0> Integer(a)
ArgumentError: invalid value for Integer: "\xEF\xBC\x91"
      from (irb):12:in `Integer'
      from (irb):12
      from /export/home/henry/apps/bin/irb:12:in `<main>'
irb(main):013:0> a.to_i
=> 0

python中的等价物给出;

>>> a = u"\uff11"
>>> print a
1
>>> int(a)
1

2 个答案:

答案 0 :(得分:3)

Ruby 1.9的数值解析只考虑ascii。我认为没有任何方便优雅的解析方法可以正确处理全宽度的unicode数字代码点。

快速污秽的黑客功能:

def parse_utf(utf_integer_string)
  ascii_numeric_chars = "0123456789"
  utf_numeric_chars = "\uff10\uff11\uff12\uff13\uff14\uff15\uff16\uff17\uff18\uff19"
  utf_integer_string.tr(utf_numeric_chars, ascii_numeric_chars).to_i
end

传入一串全角数字字符并输出一个整数。

答案 1 :(得分:0)

在解析为整数之前,将“fullwidths”等“兼容性”字符转换为其规范化版本(本例中为纯ASCII数字)。例如,使用Unicode::normalize_KCUnicodeUtils::nfkc