Ho lavorato con i metodi Ruby chr
e ord
di recente e ci sono alcune cose che non capisco.Cercando di capire i metodi .kr e .ord Ruby
Il mio progetto attuale prevede la conversione di singoli caratteri da e verso valori ordinali. A quanto ho capito, se ho una stringa con un carattere individuale come "A" e chiamo ord
su di essa ottengo la sua posizione sulla tabella ASCII che è 65. Chiamando l'inverso, 65.chr
mi dà il valore del carattere "A", quindi questo mi dice che Ruby ha una collezione da qualche parte dei valori dei caratteri ordinati, e può usare questa collezione per darmi la posizione di un personaggio specifico, o il personaggio in una posizione specifica. Potrei sbagliarmi, per favore correggimi se lo sono.
Ora capisco anche che la codifica dei caratteri predefinita di Ruby utilizza UTF-8 in modo che possa funzionare con migliaia di possibili caratteri. Così se chiedo per qualcosa di simile:
'好'.ord
ottengo la posizione di quel carattere che è 22909. Tuttavia, se chiamo chr
su tale valore:
22909.chr
ottengo "RangeError: 22909 nell'intervallo di carica. " Sono in grado di ottenere solo char
per lavorare su valori fino a 255 che sono estesi ASCII. Quindi le mie domande sono:
- Perché Rubino sembrano essere sempre i valori per
chr
dal carattere ASCII esteso set maord
da UTF-8? - C'è un modo per dire a Ruby di usare diverse codifiche quando usa questi metodi? Ad esempio, digli di usare la codifica ASCII-8BIT invece di qualsiasi impostazione predefinita?
- Se è possibile modificare la codifica predefinita, esiste un modo per ottenere il numero totale di caratteri disponibili nel set utilizzato?
http://apidock.com/ruby/Integer/chr menzioni è possibile utilizzare qualcosa come '' 22909.chr (Codifica :: UTF_8) ''. La codifica ha anche '' Encoding :: ASCII_8BIT'' se vuoi usarlo. –
@NabeelAmjad Dovresti postarlo come risposta. –
Questo è molto utile, non l'avevo visto e questo mi porta molto lontano dove sto andando. Ora, l'unica cosa che mi manca è un modo semplice per ottenere il numero di caratteri disponibili per una codifica specifica. Ad esempio ASCII_8BIT ha 256 caratteri, UTF_8 circa 1.1 milione, ect. E sì, per favore postalo come risposta. –