Confronto tra maiuscole e minuscole Ruby 1.8 e UTF-8
-
20-08-2019 - |
Domanda
Ho un'attività Rake (nella directory lib / task) che eseguo con cron sul mio web hosting condiviso. Il problema è che voglio confrontare una stringa UTF-8 usando lo stato case, ma il mio codice sorgente non è codificato UTF-8. Se salvo il codice sorgente come UTF-8 c'è un errore quando provo ad avviarlo :(
Cosa devo fare?
È possibile leggere queste stringhe dal file txt UTF-8 esterno?
P.S. Sto usando Ruby 1.8
P.S. Voglio dire confrontare in questo modo:
result = case utf8string
when 'АБВ': 1
when 'ГДИ': 2
when 'ЙКЛ': 3
when 'МНО': 4
else 5
end
Soluzione
Direi che devi modificare il tuo editor di testo poiché la DBA non è non necessaria per UTF-8. UTF-8 non dipende dall'ordine dei byte. Vedi testo del link per dettagli.
Altri suggerimenti
Ho scoperto che il mio problema non era nel caso statment
Il problema era che quando salvavo il mio codice sorgente in formato UTF-8, il mio editor di testo aggiungeva 3 byte (BOM) all'inizio per indicare che la codifica è UTF-8.
D: Cos'è una DBA?
A: Un contrassegno di ordine byte (BOM) è costituito dal codice carattere U + FEFF all'inizio di un flusso di dati, dove può essere utilizzato come a firma che definisce l'ordine dei byte e il modulo di codifica, principalmente non marcato file in chiaro. In base ad alcuni protocolli di livello superiore, potrebbe essere l'uso di una DBA obbligatorio (o proibito) nel flusso di dati Unicode definito in quel protocollo.
UTF-8, UTF-16, UTF-32 & amp; BOM
L'errore che ho ricevuto è stato:
1: Invalid char `\357' in expression
1: Invalid char `\273' in expression
1: Invalid char `\277' in expression
Prova a utilizzare il metodo mb_chars
da ActiveSupport di Rails quadro:
result = case utf8string.mb_chars
when 'АБВ': 1
when 'ГДИ': 2
when 'ЙКЛ': 3
when 'МНО': 4
else 5
end