我想将我的jruby on rails webapp中的一些数据导出到excel,所以我创建了一个csv字符串并使用
将其作为下载发送到客户端send_data(text, :filename => "file.csv", :type => "text/csv; charset=CP1252", :encoding => "CP1252")
该文件似乎是UTF-8,Excel无法正确读取。我搜索了问题,发现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的回答。
答案 0 :(得分:1)
根据我的经验,Excel无法正确处理UTF-8 CSV文件。请尝试使用UTF-16。
注意:Excel的导入文本向导似乎也适用于UTF-8
修改:Stack Overflow上的搜索为我提供了this页面,请看一下。
根据这一点,在CSV中添加BOM(字节顺序标记)签名将弹出Excel文本导入向导,因此您可以将其用作解决方法。
答案 1 :(得分:0)
你得到的结果如下吗?
cp1252= Iconv.conv("CP1252", "UTF8", text)