我有一些非ASCII数字的字符串需要转换为普通的Ruby数字进行数学计算。例如,如果作为字符串的数字“۱۹”输入,它实际上是19,但由“扩展阿拉伯印度数字1”和“扩展阿拉伯印度数字9”组成,我需要一种方法将其转换为Ruby整数Fixnum 19。
问题在于,根据这个网站,有55组0-9的这些扩展数字,即总共需要处理550个代码点。
我已经知道对于给定的组,连续数字的代码点是连续的。例如,“扩展阿拉伯印度数字0”是U+06F0,“扩展阿拉伯印度数字9”是U+06F9,因此我可以测试每个数字以查看它处于哪个范围,然后从正在查看的字符的代码点中减去零代码点作为整数,从而得到常规Ruby整数。例如,6F9 - 6F0 = 9(粗略地说,一旦它们被转换为它们的整数代码点)。
但是,要做到这一点,我需要为这55个范围创建一个巨大的查找哈希表,这是很多键入工作。我想我可以将上面链接中的HTML表格翻译成一个Ruby map,但这感觉很hacky。
我已经知道
"۱۹" =~ /[[:digit:]]+/
这两者确实是相匹配的,但问题是“如何将这些Unicode数字转换为常规的Ruby整数?”
一定有更好的方法!您有什么想法吗?
谢谢!
@CarySwoveland
"0123456789" * altzeros.size
确保两个字符串具有相同的大小。 - Stefanhash = {'۱' => '1', ..., '۹' => 9}
,并通过'۱۹'.gsub(/[[:digit:]]/, hash)
替换数字。 - Stefantwitter_cldr
内置了这个功能,但是没有找到任何实现它的方法。还有其他人可以验证吗? - Keith Bennett