2008-09-27 6 views
1

Ich schreibe ein Spiel, das Benutzereingaben nimmt und es auf dem Bildschirm rendert. Die Engine, die ich dafür benutze, ist völlig Unicode-freundlich, also würde ich das gerne behalten, wenn irgend möglich. Das Problem ist, dass die Rendering-Schleife wie folgt aussieht:Ruby: Wie man eine möglicherweise Unicode-Zeichenkette in Bytes bricht

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

Ich weiß nicht, eine ganze Menge über i18n, aber ich weiß genug, um den obigen Code zu wissen, ist immer nur für mich zur Arbeit zu gehen und Menschen, die sprechen meine Sprache. Ich würde es vorziehen, so etwas wie:

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

Enthält diese in der Core-Distribution gibt es? Ich bin etwas abgeneigt, zusätzliche Anforderungen an die Installation hinzuzufügen, aber wenn es der einzige Weg ist, es zu tun, werde ich leben.

Für zusätzlichen Spaß, ich habe keine Möglichkeit zu wissen, ob die Zeichenfolge in der Tat eine Unicode-Zeichenfolge ist.

EDIT: Die Bibliothek, die ich benutze, kann tatsächlich ganze Strings rendern, aber ich lasse den Benutzer bearbeiten, was auffliegt - wenn sie 'Rückschritt' im Wesentlichen treffen, muss ich wissen, wie viele Bytes zu hacken Sie das Ende ab.

Antwort

2

Leider hat Ruby 1.8.x eine schlechte Unicode-Unterstützung. Es wird in 1.9 angesprochen. Aber in der Zwischenzeit sind Bibliotheken wie diese (http://snippets.dzone.com/posts/show/4527) eine gute Lösung. Mit Hilfe der verknüpften Bibliothek, würde Ihr Code wie folgt aussehen:

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