代码如下:
def self.to_csv(options = {})
require "csv"
require "nkf"
field_name = ["\xEF\xBB\xBF姓名", "Name", "Birthday"] #csv文件的头(标题)
output = CSV.generate do |csv|
csv << field_name
all.each do |person|
csv << [person.name, person.en_name, person.email] # 将数据插入数组中
end
end
fh = File.new("#{Rails.root}/public/abc.csv", "wb") #创建一个可写文件流
fh.puts NKF.nkf("-wL",output) #写入数据。这里没用原作者的“-wLuxs”,因为似乎结果不太对
fh.close
end
参考的这位的写法:
http://jarry-li.iteye.com/blog/1870476
存出来的 CSV 在我 Ubuntu 下的 LibreOffice Calc 打开是正常的,Windows 下用 WPS Office 打开也是正常的,但 Excel2010 2007 打开均为乱码。记事本打开再选择另存为发现编码是 UTF8,改成 ANSI 再另保存后大家打开都正常。
我也试过在文件前加上\uFEFF
出处:http://blog.sammylin.tw/export-to-csv-has-mojibake/
还是不行……
也就是说,Excel 不识别 utf8 的文件头,那么我怎么能让 Ruby 生成出来的文件没有任何文件头(也就是 ANSI?)呢?我去掉过\xEF\xBB\xBF
,但似乎是 Ruby 默认的 utf8 的关系,所以不生效?