Rails 4.2 - 如何在CSV导出中修复ascii代码而不使用gem' iconv'?

时间:2015-04-21 00:21:15

标签: ruby-on-rails csv ruby-on-rails-4

在Rails 4.2应用程序中导出csv时,csv输出中有ascii代码用于中文字符(UTF8):

中åˆåŒç†Šå·¥ç­‰ç”¨é¤

我们在send_data尝试了没有运气的选项:

send_data @payment_requests.to_csv, :type => 'text/csv; charset=utf-8; header=present'

send_data @payment_requests.to_csv.force_encoding("UTF-8")

在模型中,强制编码utf8:

# encoding: utf-8

但它不起作用。有在线帖子谈论使用gem iconv。但是iconv取决于平台的ruby版本。是否有更清晰的解决方案来修复Rails 4.2 csv导出中的ascii?

4 个答案:

答案 0 :(得分:6)

如果@payment_requests.to_csv包含ASCII文本,则应使用encode方法:

@payment_requests.to_csv.encode("UTF-8")

@payment_requests.to_csv.force_encoding("ASCII").encode("UTF-8")

取决于@payment_requests.to_csv的内部编码。

答案 1 :(得分:1)

您可以尝试:

@payment_requests.to_csv.force_encoding("ISO-8859-1")

答案 2 :(得分:1)

中文字符

CSV.generate(options) do |csv|
  csv << column_names
  all.each do |product|
    csv << product.attributes.values_at(*column_names)
  end
end.encode('gb2312', :invalid => :replace, :undef => :replace, :replace => "?")

答案 3 :(得分:0)

这对我有用:

head = 'EF BB BF'.split(' ').map{|a|a.hex.chr}.join()

csv_str = CSV.generate(csv = head) do |csv|
  csv << [ , , , ...]
  @elements.each do |element|
    csv << [ , , , ...]
  end
end