2016-08-08 70 views
1

我有一個模塊在生成模型時生成csv文件。設置生成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 

,我包括我想要生成CSV文件

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

在我的控制器中我做

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

在模型中的模塊我想設置生成的字符編碼csv文件改爲Shift_JIS而不是默認的utf-8。做這個的最好方式是什麼 ?謝謝

編輯:

我試圖

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

現在我得到一個錯誤Encoding::ConverterNotFoundError code converter not found (UTF-8 to SHIFT-JIS)

+0

**這樣就能夠解決您的問題** [當Excel打開CSV文件,它只是假設的 「ISO-8859-1」 字符編碼。我猜它甚至不知道你在HTTP回覆中發送的編碼信息。這就是爲什麼設置爲UTF-8不起作用。](http://stackoverflow.com/a/11451089/4209704) –

回答

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

的伎倆

+0

沒關係接受你自己的答案,如果它爲你工作:) –

0

你可以通過encoding: '<non utf-8 encoding>'選項,你CsvExportable傳遞給to_csv所以options哈希在生成csv文件時它可用於CSV.generate方法。

+0

Alredy試過「未知的編碼名稱 - SHIFT-JIS」 –

+0

嘗試'Shift_JIS' – bhanu