2012-07-07 7 views
1

J'utilise Rails 3.2 et la bibliothèque CSV pour importer des fichiers CSV. Je l'utilise comme ceci:Import CSV et codages

CSV.foreach(open(csv_url), :headers => true) do |p| 

Quand je lance sur mon ordinateur local, il fonctionne très bien, mais pour une raison quelconque, il échoue pour certains enregistrements sur Heroku avec l'erreur:

incompatible character encodings: ASCII-8BIT and UTF-8 

Il échoue dans une méthode que j'ai définie qui ajoute simplement deux chaînes:

def name_and_brand 
    "#{name} #{brand.name}" 
end 

Cela échoue seulement sur certains enregistrements, pas tous.

J'ai lu beaucoup d'informations à ce sujet mais je n'ai toujours pas compris comment le résoudre.

Si je produis simplement l'encodage du texte que je suis en train d'analyser, il dit sur mon ordinateur local qu'il est UTF-8, mais sur Heroku il est dit ASCII-8BIT.

Si j'exécute "a".encoding dans la console, il sort UTF-8 et les sorties Heroku UTF-8 aussi.

Ce que j'ai essayé jusqu'à présent

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

# in environment.rb 
Encoding.default_external = Encoding::UTF_8 
Encoding.default_internal = Encoding::UTF_8 

# in other files 
# encoding: UTF-8 

Une différence que j'ai trouvé est que Heroku utiliser Ruby 1.9.2 et j'utiliser 1.9.3 sur ma machine locale. Est-ce que ça pourrait être ça?

Des idées que je peux essayer plus?

EDIT

Je trouve que vous pouvez choisir explicitement la version rubis sur Heroku en ajoutant ruby "1.9.3" dans le Gemfile. Semble avoir corrigé mon problème.

+0

J'utilise Ruby 1.9.3p194 mais je vais avoir toujours le même problème! Est-ce que quelqu'un sait comment forcer l'encodage du fichier téléchargé? – Jonatan

Répondre

0

je devais changer explicitement la version rubis à 1.9.3 en ajoutant ruby "1.9.3" dans mon Gemfile