2012-07-23 10 views
9

Quindi, sto provando a scaricare un file zip da un sito Web e a inserirli in una tabella. Il download ha funzionato prima, ma improvvisamente non lo è più. Ottengo un "scrivi": "\ xB6" dal problema ASCII-8BIT a UTF-8 (Encoding :: UndefinedConversionError) ". Molto strano, nulla è cambiato dall'ultima volta che ho eseguito la sceneggiatura. Ecco la parte del codice che sta avendo i problemi. Sto usando una gemma che mi permette di analizzare il file DBF all'interno del file zip.Errore di conversione codifica non definita - Ruby on Rails, Error on Write

Ecco il codice:

`write': "\xB6" from ASCII-8BIT to UTF-8 (Encoding::UndefinedConversionError) 

Grazie per l'aiuto

UPDATE: Io corro all'interno di rotaie, ovviamente. Ho eseguito la sceneggiatura all'esterno dell'ambiente delle guide e ha funzionato correttamente. Quindi Rails sta interferendo in qualche modo con il processo di scrittura.

UPDATE 2: SOLVED - Ho modificato "w" in "wb", a quanto pare questo è causato dalle guide 3+. Non mi è venuto in mente di provarlo prima. Speriamo che questo aiuti le altre persone.

risposta

2

Probabilmente anche potuto farlo passando

:output_encoding => "binary" 

al File.open, che penso avrebbe fatto la stessa cosa di modalità 'wb', forse più chiaramente. Ma bel lavoro a capire "wb" :).

Sì, in Ruby 1.9, che è in grado di riconoscere la codifica del codice, spesso è necessario dire cose diverse sulla codifica che si desidera, inclusa la "codifica nulla" "binaria".

È possibile che Rails stia impostando Encoding.default_external su UTF-8 e File stia utilizzando Encoding.default_external, che potrebbe essere il motivo per cui rotaie e non-rotaie fanno la differenza.

Problemi di codifica in ruby ​​1.9 possono sicuramente diventare molto confusi molto velocemente, con un sacco di stati normalmente nascosti che possono influenzare esattamente ciò che accade.