2013-12-11 11 views
10

Sono on Rails 4 e Ruby 1.9.3Set UTF-8 come predefinito per Ruby 1.9.3

utilizzare caratteri "strani", molto spesso, quindi devo dichiarare codifica UTF-8 in alto di tutti i file .rb.

C'è un modo per impostare UTF-8 come codifica predefinita per Ruby 1.9.3?


ho provato tutte le risposte, ma durante l'esecuzione rake db:seed e la creazione di un oggetto i cui attributi contenere US-ASCII caratteri non validi, ho ancora ricevere questo errore:

`block in trace_on': invalid byte sequence in US-ASCII (ArgumentError) 
+0

che dichiara la codepage predefinita all'inizio di ogni file come 'utf-8' è necessario, quando si utilizza il char unicode direttamente nello stesso file .rb. Quale problema ha portato alla tua domanda? 'Ct-UTF-8' è impostato in 'ruby 1.9.x' di default. Hai una stringa con codepage non-utf? –

+0

"cp UTF-8 'è impostato in ruby ​​1.9.x per impostazione predefinita." questo non è vero –

risposta

15

Per cambiare la codifica di sorgente (cioè la codifica tuo attuale scritto acida Codice ce è in), è necessario utilizzare il commento magia attualmente:

# encoding: utf-8 

Non è sufficiente a uno impostare la codifica interna (la codifica della rappresentazione di stringa interna dopo la conversione) o la codifica esterna (l'assunto codifica dei file letti). In realtà devi impostare il commento di codifica magica sopra i file per impostare la codifica sorgente.

In ChiliProject abbiamo uno rake task che imposta automaticamente l'intestazione di codifica corretta in tutti i file prima di un rilascio.

Per quanto riguarda i valori di default di codifica:

  • Ruby 1.8 e al di sotto non hanno conoscevano il concetto di codifiche stringa a tutti. Le stringhe erano più o meno array di byte.
  • Ruby 1.9: la codifica della stringa predefinita è US_ASCII ovunque.
  • Ruby 2.0 e versioni successive: la codifica della stringa predefinita è UTF-8.

Pertanto, se si utilizza Ruby 2.0, è possibile saltare il commento di codifica e presumere correttamente la codifica UTF-8 ovunque per impostazione predefinita.

2

Nella tua application.rb

Questa non è l'intera storia come sottolineato da Holger, date un'occhiata a questo question per ulteriori spiegazioni.

+0

Questo ha definito solo la codifica interna (la rappresentazione della stringa interna dopo la conversione) e la codifica esterna (la codifica predefinita dei file letti), ma non la codifica dei file di origine ruby. Questo può essere modificato solo con commenti magici sopra un file sorgente. –

4

Penso che vorresti uno dei seguenti, a seconda del contesto.

Encoding.default_internal = Encoding::UTF_8 
Encoding.default_external = Encoding::UTF_8 

Questa impostazione viene eseguita nel file environment.rb.

+1

Questo ha definito solo la codifica interna (la rappresentazione della stringa interna dopo la conversione) e la codifica esterna (la codifica predefinita dei file letti), ma non la codifica dei file di origine ruby. Questo può essere modificato solo con commenti magici sopra un file sorgente. –

6

in Ruby 1.9 the default is ASCII

in Ruby 2.0 the default is UTF-8.


cambio di versione di Ruby

o

config.encoding = "utf-8" # application.rb 

e nella vostra database.yml

development: 
    adapter: your_db 
    host:  localhost 
    encoding: utf8 
+0

In quale file deve andare l'ultimo blocco di codice? –

+0

in 'database.yml' è solo una raccomandazione e non necessariamente –

Problemi correlati