2010-11-09 8 views
1

Iv récemment écrit du code qui m'aidera à exporter une base de données SQL en CSV en utilisant FasterCSV avec rails. Cependant, certaines parties de ma base de données contiennent des caractères chinois traditionnels. Quand je l'exporte, je deviens ?????? comme la sortie dans le fichier CSV. Iv a déjà essayé de changer $ KCODE = 'u' pour que FasterCSV utilise UTF-8 pour encoder le fichier CSV, mais pas de chance. Iconv pour convertir l'encodage me donne aussi des résultats étranges. Voici le code source:FasterCSV et caractères non latins

def csv 
@lists = Project.find(:all, :order=> (params[:sort] + ' ' + params[:direction]), :conditions => ["name LIKE ?", "%#{params[:selection]}%"]) 

csv_string = FasterCSV.generate do |csv| 
    csv << [<bold> "Status","Name","Summary","Description","Creator","Comment","Contact Information","Created Date","Updated Date"] 

    @lists.each do |project| 
    csv << [project.status, project.name, project.summary, project.description, project.creator, project.statusreason, project.contactinfo, project.created_at, project.updated_at] 
    end 
end 

filename = Time.now.strftime("%Y%m%d") + ".csv" 
send_data(csv_string, 
    :type => 'text/csv; charset=utf-8; header=present', 
    :filename => filename) 

fin

Merci,

Répondre

2

Je ne suis pas habitué à travailler avec des caractères chinois, mais vous pouvez essayer d'ajouter l'option :encoding à 'u' (UTF- 8) sur le generate appel:

... 
csv_string = FasterCSV.generate(:encoding => 'u') do |csv| 
... 

Comme une note de côté, je vous recommande d'utiliser named_scopes au lieu d'écrire ceci:

Project.find(:all, :order=> (params[:sort] + ' ' + params[:direction]), :conditions => ["name LIKE ?", "%#{params[:selection]}%"]) 

Bonne chance!

+0

Merci! Ça a marché. Cependant, quand je l'ouvre dans MS Excel, je suis encore en train de faire ???? en tant que sorties. Je devine qu'il a quelque chose à voir avec Excel plutôt que mon option d'exportation dans les rails. Et merci pour l'indice, j'ai changé cette section en portées nommées. – TheRealVayne

+0

Excel s'attend à ce que l'encodage soit ANSI. Au cas où, essayez de mettre ': encoding' sur 'e' ou 's', et voyez si Excel est capable de les ouvrir. Sinon, vous pouvez essayer de convertir l'UTF8 en ANSI manuellement - voir http://stackoverflow.com/questions/263271/converting-utf8-to-ansi-with-ruby – kikito

Questions connexes