在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?
答案 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