如何将一个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
答案 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_KC
或UnicodeUtils::nfkc
。