我想从我的 jruby on rails webapp 导出一些数据到 excel,所以我创建了一个 csv 字符串并将其作为下载发送到客户端使用
send_data(text, :filename => "file.csv", :type => "text/csv; charset=CP1252", :encoding => "CP1252")
该文件似乎是 Excel 无法正确读取的 UTF-8。我搜索了这个问题,发现 iconv 可以转换编码。我尝试这样做:
ic = Iconv.new('CP1252', 'UTF-8')
text = ic.iconv(text)
但是当我发送转换后的文本时,它没有任何区别。它仍然是 UTF-8,Excel 无法读取特殊字符。有几种使用 iconv 的解决方案,所以这似乎对其他人有用。当我使用 iconv 手动转换 linux shell 上的文件时,它可以工作。
我究竟做错了什么?有没有更好的办法?
我正在使用: - jruby 1.3.1 (ruby 1.8.6p287) (2009-06-15 2fd6c3d) (Java HotSpot(TM) Client VM 1.6.0_19) [i386-java] - Debian Lenny - Glassfish 应用服务器 - Iceweasel 3.0。 6
编辑:我是否必须包含一些宝石才能使用 iconv?
解决方案:S.Mark 指出了这个解决方案:你必须使用 UTF-16LE 编码才能让 excel 理解它,像这样:
text= Iconv.iconv('UTF-16LE', 'UTF-8', text)
谢谢,S.Mark 的回答。