将jruby 1.8字符串转换为windows编码?

时间:2010-04-23 10:01:10

标签: ruby-on-rails ruby encoding jruby iconv

我想将我的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的回答。

2 个答案:

答案 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)