在Ruby中将Unicode Number转换为Integer

时间:2016-05-20 05:41:21

标签: ruby regex ruby-on-rails-4 unicode

遗憾的是,我有一些数字作为字符串使用非ASCII数字。我需要将它们转换为常规的Ruby数字来对它们进行一些数学运算。因此,例如,如果数字作为字符串“19”进来,这是19,但作为字符“扩展阿拉伯语数字一”后跟“扩展阿拉伯语数字九”,我需要一种方法将其转换为Ruby整数Fixnum 19。

问题是according to this,这些扩展数字中有55组0-9,即我需要处理550个总代码点。

我已经知道,对于给定的组,连续数字的代码点是连续的,因此例如扩展的阿拉伯语数字0是U + 06F0,扩展的阿拉伯语数字9是U + 06F9,所以我可以测试每个数字到看看它在哪个范围,然后从我正在看的字符的代码点中将零代码点减去为一个整数,给我一个常规的Ruby整数。例如,6F9 - 6F0 = 9(粗略地说,一旦它们被转换为整数代码点)。

但是为了做到这一点,我需要为这55个范围创建一个巨大的查找哈希,这就是很多打字。我想我可以将上面链接中的HTML表格翻译成红宝石地图,但这感觉很糟糕。

我已经知道了

"۱۹" =~ /[[:digit:]]+/

将是一个匹配,但问题是“如何将这些Unicode数字转换回常规的Ruby整数?”

必须有更好的方法!有什么想法吗?

谢谢!

1 个答案:

答案 0 :(得分:6)

这是相对无痛的。

{{1}}