2008-09-27 4 views
1

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

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

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

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

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

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

EDIT: Библиотека, которую я использую, действительно может отображать целые строки, однако я разрешаю пользователю редактировать то, что появляется на ходу - если они попадают в «backspace», по сути, мне нужно знать, сколько байтов отрубить конец.

ответ

2

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

"unicode_string".each_utf8_char do |u| 
    render_unicode_letter(u) 
end 

 Смежные вопросы

  • Нет связанных вопросов^_^