Ruby on rails Rails 4.2-如何修复CSV导出中的ascii代码而不使用gem';iconv';?

Ruby on rails Rails 4.2-如何修复CSV导出中的ascii代码而不使用gem';iconv';?,ruby-on-rails,csv,ruby-on-rails-4,Ruby On Rails,Csv,Ruby On Rails 4,在Rails 4.2应用程序中导出csv时,csv输出中的中文字符(UTF8)包含ascii码: 我们尝试了send_data中的选项,但运气不佳: send_data @payment_requests.to_csv, :type => 'text/csv; charset=utf-8; header=present' 以及: 在模型中,有强制编码utf8: # encoding: utf-8 但它不起作用。网上有一些帖子谈论如何使用gemiconv。但是,iconv取决于平台的ru

在Rails 4.2应用程序中导出csv时,csv输出中的中文字符(UTF8)包含ascii码:

我们尝试了
send_data
中的选项,但运气不佳:

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

在模型中,有强制编码utf8:

# encoding: utf-8
但它不起作用。网上有一些帖子谈论如何使用gem
iconv
。但是,
iconv
取决于平台的ruby版本。是否有更干净的解决方案来修复Rails 4.2 csv导出中的ascii?

您可以尝试:

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

如果
@payment\u请求到_csv
包含ASCII文本,则应使用
编码方法:

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


取决于“支付请求”的内部编码。

用于汉字

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 => "?")
CSV.generate(选项)do | CSV|
csv:replace,:replace=>“?”)

这就是我的工作原理:

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
head='efbbbf'.split('').map{a{a.hex.chr}.join()
csv_str=csv.generate(csv=head)do | csv|

没有运气。即使它是干净的。汉字?也许您需要使用UTF-8而不是ISO-8859-1。我记得Rails的默认字符集是uft8。同一段代码为汉字导出右csv文件。然而,在Rails 4.2中没有。数据的实际编码是什么?
@FrederickCheung
,我相信它是utf8,作为Rails 4的默认值。我们在Rails 3应用程序中使用了类似的导出方法,并且正确显示了中文字符。
@BradWerth
,答案需要gem“iconv”。这些ASCII字符是通过浏览器还是在文件编辑器中显示的?
@payment_requests.to_csv.force_encoding("ASCII").encode("UTF-8")
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 => "?")
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