Как разобрать строку целочисленных символов полной ширины в целое число в ruby - PullRequest
2 голосов
/ 09 августа 2010

Как я могу разобрать строку целочисленных символов Unicode в целое число в рубине?

Попытка очевидных результатов в;

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 ]

3 голосов
/ 09 августа 2010

Числовой анализ Ruby 1.9 работает только в ascii. Я не думаю, что есть какие-либо удобные элегантные методы синтаксического анализа, которые должным образом обрабатывают полноразмерные числовые кодовые значения Юникода.

Функция быстрого грязного взлома:

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

Передайте строку числовых символов полной ширины и получите целое число.

0 голосов
/ 10 августа 2010

Преобразуйте символы «совместимости», такие как полная ширина, в их нормализованные версии (в данном случае обычные числа ASCII) перед анализом как целое число.Например, используя Unicode::normalize_KC или UnicodeUtils::nfkc.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...