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