2008-09-27 6 views
1

J'écris un jeu qui prend l'entrée de l'utilisateur et le rend à l'écran. Le moteur que j'utilise pour cela est entièrement compatible Unicode, donc j'aimerais le garder si possible. Le problème est que la boucle de rendu ressemble à ceci:Ruby: Comment casser une chaîne potentiellement unicode en octets

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

Je ne sais pas i18n, beaucoup mais je sais assez pour connaître le code ci-dessus ne va jamais à travailler pour moi et les gens qui parlent ma langue. Je préférerais quelque chose comme:

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

Est-ce que cela existe dans la distribution de base? Je suis quelque peu opposé à l'ajout d'exigences supplémentaires à l'installation, mais si c'est la seule façon de le faire, je vais vivre.

Pour plus de plaisir, je n'ai aucun moyen de savoir si la chaîne est, en fait, une chaîne unicode.

EDIT: La bibliothèque que j'utilise peut en effet rendre des chaînes entières, mais je laisse l'utilisateur éditer ce qui arrive à la volée - si elles frappent 'backspace', essentiellement, j'ai besoin de savoir combien d'octets couper la fin.

Répondre

2

Malheureusement ruby ​​1.8.x a un faible support Unicode. Il est adressé en 1.9. Mais en attendant, les bibliothèques comme celle-ci (http://snippets.dzone.com/posts/show/4527) sont une bonne solution. Utilisation de la bibliothèque liée, votre code ressemblerait à quelque chose comme ceci:

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