1

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

4

2 回答 2

1

根据我的经验,Excel 无法正确处理 UTF-8 CSV 文件。请改用 UTF-16。

注意:Excel 的导入文本向导似乎也适用于 UTF-8

编辑:堆栈溢出搜索给我这个页面,请看一下。

据此,在 CSV 中添加 BOM(字节顺序标记)签名将弹出 Excel 文本导入向导,因此您可以将其用作解决方法。

于 2010-04-23T10:08:24.487 回答
0

您是否得到与以下相同的结果?

cp1252= Iconv.conv("CP1252", "UTF8", text)
于 2010-04-23T10:11:53.810 回答