2016-08-08 2 views
1

J'ai un module pour générer le fichier csv du modèle lorsqu'il est inclus.Définir le codage des caractères lors de la génération des fichiers CSV Rails 4.2

# app/models/concerns/csv_exportable.rb 
module CsvExportable 
    extend ActiveSupport::Concern 

    included do 
    def self.to_csv(options = {}) 
     CSV.generate(options) do |csv| 
     csv << column_names 
     all.each do |thismodel| 
      csv << thismodel.attributes.values_at(*column_names) 
     end 
     end 
    end 
    end 
end 

et j'inclure le module dans les modèles pour lesquels je veux générer un fichier csv

# app/models/product.rb 
class Reason < ActiveRecord::Base 
    include CsvExportable 
    . 
    . 
end 

Dans mon contrôleur je

respond_to do |format| 
    format.html 
    format.csv { send_data @products.to_csv, filename: 'products.csv' } 
end 

Je veux régler le codage de caractères généré fichier csv à Shift_JIS au lieu de par défaut utf-8. Quelle est la meilleure façon de procéder ? Merci

EDIT:

J'ai essayé

format.csv { send_data (@products.to_csv).encode("SHIFT-JIS"), filename: 'products.csv' } 

maintenant je reçois une erreur Encoding::ConverterNotFoundError code converter not found (UTF-8 to SHIFT-JIS)

+0

** Cela peut résoudre votre problème ** [Lorsque Excel ouvre le fichier CSV, il prend juste un caractère "iso-8859-1" encoding. Je suppose qu'il ne connaît même pas les informations d'encodage que vous envoyez dans votre réponse HTTP. C'est pourquoi la mise en UTF-8 ne fonctionne pas.] (Http://stackoverflow.com/a/11451089/4209704) –

Répondre

1
format.csv { 
     send_data (@products.to_csv).encode(Encoding::SJIS), 
     filename: 'products.csv', 
     type: 'text/csv; charset=shift_jis' 
     } 

a fait l'affaire

+0

Ça va accepter votre propre réponse si cela a fonctionné pour vous :) –

0

Vous pouvez passer encoding: '<non utf-8 encoding>' option dans la vous avez passé à to_csv hachage options dans CsvExportable si qu'il sera disponible pour la méthode CSV.generate lors de la génération du fichier csv.

+0

Alredy a essayé que "nom d'encodage inconnu - SHIFT-JIS" –

+0

Essayez 'Shift_JIS' – bhanu