【问题标题】:convert jruby 1.8 string to windows encoding?将 jruby 1.8 字符串转换为 windows 编码?
【发布时间】:2010-04-23 10:01:09
【问题描述】:

我想从我的 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 莱尼 - Glassfish 应用服务器 - Iceweasel 3.0.6

编辑: 我是否必须包含一些 gem 才能使用 iconv?

解决方案: S.Mark 指出了这个解决方案: 你必须使用 UTF-16LE 编码才能让 excel 理解它,像这样:

text= Iconv.iconv('UTF-16LE', 'UTF-8', text)

感谢 S.Mark 的回答。

【问题讨论】:

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


    【解决方案1】:

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

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

    编辑:Stack Overflow 上的搜索给我this 页面,请看一下。

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

    【讨论】:

    • 我的问题是我根本无法转换文本。所以 UTF-16 不是一个选项。感谢您的解决方法,我现在将尝试并在 A 计划失败时使用它。不幸的是,要求用户选择正确的编码意味着更多的培训工作和大量的支持工作来解释......
    • @Arne,我刚刚尝试用这种方式使用 UTF16le 测试 Iconv,Iconv.new('UTF-16LE', 'UTF-8'),转换在 irb 上工作,您可能也想测试一下。注意UTF-16LEUTF-16是不同的,UTF-16里面有BOM签名。
    • 那个成功了!非常感谢您的帮助。我对此表示高度赞赏。我会将其发布在我的 OP 中以供其他人理解。
    • 哦,好的,很高兴知道@Arne
    【解决方案2】:

    你得到以下相同的结果吗?

    cp1252= Iconv.conv("CP1252", "UTF8", text)
    

    【讨论】:

    • 是的,它产生相同的结果。这就像根本没有转换一样。
    • 它对你有用吗?那么你的设置有什么不同呢?
    • 奇怪,我得测试一下再回复你。
    猜你喜欢
    • 1970-01-01
    • 2021-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-05
    • 2011-12-06
    相关资源
    最近更新 更多