【问题标题】:Set character encoding when generating CSV file Rails 4.2生成CSV文件Rails 4.2时设置字符编码
【发布时间】:2016-08-08 05:17:18
【问题描述】:

我有一个模块可以在包含时生成模型的 csv 文件。

# 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)

【问题讨论】:

标签: ruby-on-rails csv character-encoding cjk shift-jis


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

成功了

【讨论】:

  • 如果对你有用,可以接受你自己的答案 :)
【解决方案2】:

您可以将options 中的encoding: '&lt;non utf-8 encoding&gt;' 选项传递给CsvExportable 中的to_csv,以便在生成csv 文件时它可用于CSV.generate 方法。

【讨论】:

  • 已经尝试过“未知的编码名称 - SHIFT-JIS”
猜你喜欢
  • 2018-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-05
  • 2010-10-04
相关资源
最近更新 更多