我将数据导出到rails中的CSV文件中,在我的某些字段中,当我在Excel中打开时,我遇到了类似的字符编码问题:
didn’t
我从一个例子中借用了这段代码,我假设编码已关闭。知道应该是什么吗?
send_data csv_data,
:type => 'text/csv; charset=iso-8859-1; header=present',
:disposition => "attachment; filename=#{filename}.csv"
答案 0 :(得分:18)
当Excel打开CSV文件时,它只是采用“iso-8859-1”字符编码。我想它甚至不知道您在HTTP回复中发送的编码信息。这就是为什么将它设置为UTF-8不起作用。
因此,为了在Rails中导出Excel的CSV文件,您可以这样做:
send_data Iconv.conv('iso-8859-1//IGNORE', 'utf-8', csv_data),
:type => 'text/csv; charset=iso-8859-1; header=present',
:disposition => "attachment; filename=#{filename}.csv"
这会将您的UTF-8数据字符串(即Rails默认值)重新编码为ISO-8859并发送它。顺便说一下,这个回复实际上是ISO-8859-1编码的信息(这对Excel没有什么影响,但如果你应该在浏览器中打开它,那么技术上是正确的。)。
答案 1 :(得分:11)
这对我有用,有中文字符!excel csv格式(BOM + UTF8)
def export_csv_excel
....
# Add BOM to make excel using utf8 to open csv file
head = 'EF BB BF'.split(' ').map{|a|a.hex.chr}.join()
csv_str = CSV.generate(csv = head) do |csv|
csv << [ , , , ...]
@invoices.each do |invoice|
csv << [ , , , ...]
end
end
send_data csv_str, filename: "Invoices-#{Time.now.strftime("%y%m%d%H%M%S")}.csv", type: "text/csv"
end
来源(中文):http://blog.inheart.tw/2013/09/rubyraisl-csv-excel.html
答案 2 :(得分:6)
以上答案在Mac Excel上对我不起作用:
使用iso-8859-1
需要我替换/删除奇怪的字符,这对我来说不是一个很好的解决方案,使用BOM
与UTF8
在Windows下工作但不在Mac Excel下工作。
对我有用的是https://stackoverflow.com/a/20194266/226255
建议的WINDOWS-1252
编码
def self.to_csv(options = {})
(CSV.generate(options) do |csv|
csv << self.headers
all.each do |e|
csv << e.values
end
end).encode('WINDOWS-1252', :undef => :replace, :replace => '')
end
答案 3 :(得分:0)
这是我使用I18n.transliterate
的方法:
def self.to_csv(options = {})
csv = CSV.generate(options) do |csv|
csv << your_attributes
end
I18n.transliterate(csv)
end
I18n.transliterate
只会移除奇怪的字符,并尝试使其可读(例如,它会将á
替换为a
,ö
替换为o
等)。试试吧。