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
È stato utile?

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top