Domanda

Sto scrivendo un gioco che sta prendendo l'input dell'utente e lo rende sullo schermo. Il motore che sto usando per questo è completamente unicode, quindi mi piacerebbe tenerlo se possibile. Il problema è che il ciclo di rendering è simile al seguente:

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

Non so molto di i18n, ma so abbastanza per sapere che il codice sopra funzionerà solo per me e per le persone che parlano la mia lingua. Preferirei qualcosa del tipo:

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

Esiste nella distribuzione principale? Sono in qualche modo contrario ad aggiungere ulteriori requisiti all'installazione, ma se è l'unico modo per farlo, vivrò.

Per maggior divertimento, non ho modo di sapere se la stringa è, in effetti, una stringa unicode.

EDIT: la libreria che sto usando può effettivamente rendere intere stringhe, tuttavia sto lasciando che l'utente modifichi al volo ciò che accade al volo - se colpiscono 'backspace', in sostanza, devo sapere quanti byte tagliare alla fine.

È stato utile?

Soluzione

Sfortunatamente ruby ??1.8.x ha uno scarso supporto Unicode. È stato affrontato in 1.9. Ma nel frattempo, librerie come questa ( http://snippets.dzone.com/posts / show / 4527 ) sono una buona soluzione. Usando la libreria collegata, il tuo codice sarebbe simile a questo:

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

Altri suggerimenti

Potresti provare a includere ActiveSupport :: CoreExtensions :: String: : Modulo Unicode dalla base di codice delle rotaie.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top