Ruby: Wie ein möglicherweise Unicode-String in Bytes brechen
Frage
Ich schreibe ein Spiel, das Benutzereingabe nimmt und Rendering es auf dem Bildschirm. Der Motor ich dafür bin mit ist vollständig Unicode-freundlich, so würde ich die gerne behalten, wenn überhaupt möglich. Das Problem ist, dass die Rendering-Schleife wie folgt aussieht:
"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 Leute, die meine Sprache sprechen. Ich würde es vorziehen, so etwas wie:
"unicode string".each_unicode_letter do |u|
render_unicode_letter(u)
end
Gibt es das in der Core-Distribution? Ich bin ein wenig abgeneigt, das Hinzufügen von zusätzlichen Anforderungen an die Installation, aber wenn es der einzige Weg, es zu tun, ich werde leben.
Für zusätzlichen Spaß, ich habe keine Möglichkeit zu wissen, wenn die Zeichenfolge, in der Tat, ein Unicode-String.
EDIT: Die Bibliothek verwende ich kann in der Tat ganze Strings machen, aber ich lasse ich den Benutzer bearbeiten, was im laufenden Betrieb kommt - wenn sie ‚Backspace‘ getroffen, im Wesentlichen, was ich wissen muß, wie viele Bytes zu hacken vom Ende.
Lösung
Leider Rubin 1.8.x hat eine schlechte Unicode-Unterstützung. Es wird in 1,9 gerichtet. Aber in der Zwischenzeit, Bibliotheken wie diese ( http://snippets.dzone.com/posts / show / 4527 ) ist eine gute Lösung. Mit Hilfe der verknüpften Bibliothek, Ihr Code in etwa so aussehen:
"unicode_string".each_utf8_char do |u|
render_unicode_letter(u)
end
Andere Tipps
Sie können Active :: CoreExtensions :: String: : Unicode Modul von den Schienen Codebasis.