2009-11-16 14 views
192

sto usando Ruby 1.9.1 con Rails 2.3.4 La mia domanda è quello di gestire l'input di testovalida multibyte char (US-ASCII) con Rails e Ruby 1.9

Se provo qualcosa di simile (le virgolette all'interno un aspetto diverso)

text = "”“" 

ottengo il seguente errore:

#<SyntaxError: /Users/tammam56/rubydev/favquote/lib/daemons/twitter_quotes_fetch.rb:54: invalid multibyte char (US-ASCII) 
/Users/tammam56/rubydev/favquote/lib/daemons/twitter_quotes_fetch.rb:54: invalid multibyte char (US-ASCII) 
/Users/tammam56/rubydev/favquote/lib/daemons/twitter_quotes_fetch.rb:54: syntax error, unexpected $end, expecting keyword_end 

ho bisogno di quei utente virgolette come gli utenti potrebbero ingresso loro e devo tenere conto di questo?

Qualche idea?

+0

Se il codice non ha apici inversi a ma sei stato "accusato" di usare i backtick, potrebbero esserci delle strane spaziature/tabulazioni/problemi di nuova riga nel tuo file. Prova ad esporlo in uno spazio vuoto StackOverflow, ad esempio, e SO inizierà a comportarsi in modo strano. Rimuovi gli strani spazi e le schede e le nuove righe. Ancora una volta, solo incollare il codice in un SO vuoto e provare a formattare il codice per la presentazione è un modo per darti un suggerimento. –

risposta

6

Queste virgolette oblique non sono caratteri ASCII. Il messaggio di errore è fuorviante sul fatto che siano "multi-byte".

+2

Perché è fuorviante? Sono * sono * caratteri multibyte. –

+4

Perché ASCII non definisce alcuna codifica multibyte. Per quanto riguarda ASCII, quelli sono senza senso, che è valido in una codifica correlata. – Novelocrat

685

Hai provato ad aggiungere un commento magico nello script in cui si utilizzano caratteri non ASCII? Dovrebbe andare in cima alla sceneggiatura.

#!/bin/env ruby 
# encoding: utf-8 

Ha funzionato per me come un fascino.

+2

Hmm ......... l'ha aggiunto all'inizio del file ma ha ancora lo stesso messaggio di errore. Eventuali suggerimenti? –

+0

@ArtemKalinchuk Basta aggiungerlo direttamente sotto '#!/ bin/env ruby' Ho avuto una linea vuota tra loro e non ha funzionato. – Thomas

+8

La spiegazione centrale può essere trovata nell'articolo @dalyons collegato: i file _source ricevono una codifica US-ASCII, a meno che non si dica diversamente. Se si posiziona un contenuto non ASCII in un letterale String senza modificare la Codifica sorgente, Ruby morirà con quell'errore. Grazie ragazzi, finalmente l'ho capito :-) –

43

Se si desidera aggiungere commenti magia su tutti i file di origine di un progetto facilmente, è possibile utilizzare il magic_encoding gemma

sudo gem install magic_encoding 

poi basta chiamare magic_encoding nel terminale dalla radice della vostra applicazione.

+0

Penso che sia importante ricordare questo tipo di dettagli, quindi non userei quella gemma per almeno alcuni mesi di scrittura # encoding: utf-8 manualmente. –

+0

aggiungendo "gem magic_encoding" a gemfile su rails 2.3 e ruby ​​1.9 ha aiutato – Elmor

+0

che non si integra nei test di cetriolo. – Trip

6

Solo una nota che a partire da Ruby 2.0 non è necessario aggiungere # encoding: utf-8. UTF-8 viene rilevato automaticamente.

3

che ha funzionato per me:

$ export LC_ALL=en_US.UTF-8 
$ export LANG=en_US.UTF-8 
16

Voglio solo aggiungere la mia soluzione:

Io uso dieresi tedesche come ö, ü, ä e ottenuto lo stesso errore.
@Jarek Zmudzinski appena detto come funziona, ma qui è la mia:

aggiungere questo codice alla parte superiore del vostro controller: # encoding: UTF-8
(ad esempio per usare un messaggio flash con dieresi)

esempio della mia controller:

# encoding: UTF-8 
class UserController < ApplicationController 

Ora è possibile utilizzare ö, ä, ü, ß, "", ecc

Problemi correlati