Ruby: как разбить потенциально юникодную строку на байты - PullRequest
1 голос
/ 28 сентября 2008

Я пишу игру, которая принимает пользовательский ввод и отображает его на экране. Движок, который я использую для этого, полностью дружественный к юникоду, поэтому я хотел бы сохранить его, если это вообще возможно. Проблема в том, что цикл рендеринга выглядит так:

"string".each_byte do |c|
    render_this_letter(c)
end

Я не очень много знаю о i18n, но знаю достаточно, чтобы знать, что приведенный выше код будет работать только для меня и людей, говорящих на моем языке. Я бы предпочел что-то вроде:

"unicode string".each_unicode_letter do |u|
    render_unicode_letter(u)
end

Существует ли это в ядре дистрибутива? Я немного против добавления дополнительных требований к установке, но если это единственный способ сделать это, я буду жить.

Для дополнительного удовольствия у меня нет возможности узнать, является ли строка фактически строкой Юникода.

РЕДАКТИРОВАТЬ: библиотека, которую я использую, действительно может отображать целые строки, однако я позволяю пользователю редактировать то, что происходит на лету - если они нажимают «backspace», по сути, мне нужно знать, сколько байтов нужно нарезать с конца.

Ответы [ 2 ]

2 голосов
/ 28 сентября 2008

Вы можете попробовать включить модуль ActiveSupport :: CoreExtensions :: String :: Unicode из кодовой базы rails.

2 голосов
/ 28 сентября 2008

К сожалению, ruby ​​1.8.x плохо поддерживает юникод. Это решается в 1.9. Но в то же время, библиотеки, подобные этой (http://snippets.dzone.com/posts/show/4527), являются хорошим решением. При использовании связанной библиотеки ваш код будет выглядеть примерно так:

"unicode_string".each_utf8_char do |u| 
    render_unicode_letter(u)
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...