使用Ruby on Rails进行字符编码 - 操作系统依赖性

时间:2012-12-05 09:05:02

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

我正在查看运行相同代码的两台开发人员计算机。代码调用Web服务,使用nokogiri(两台机器上的v1.5.5)解析它,并在视图中显示结果。

一台运行Ubuntu 12.04和jruby 1.7的计算机显示预期结果。

另一个,运行Windows 7和jruby 1.7,使字符编码变得混乱(导致一堆???而不是预期的输出。

我已经检查过两者都使用相同的jruby版本和完全相同的应用程序代码,所以我怀疑这可能与底层JVM实现有关。

我应该如何追踪这个问题?把它称为一个犹豫不决的虫子是否恰当?

1 个答案:

答案 0 :(得分:1)

如果两台机器上的代码相同,则可能是您的任何捆绑的gem在具有该代码的窗口上不兼容。在从Ubuntu移动代码之后,我还遇到了许多与Windows上的宝石相关的问题。

在Ubuntu上,gems的sudo安装命令可以自己安装gems和依赖项,而无需下载任何其他内容,但在Windows上,具有依赖项的gem安装需要手动安装才能使用。

请检查Windows上任何gem的任何兼容性问题。更多的我怀疑jruby会导致bug,因为我在Windows上的应用程序中也使用了nokogiri而没有任何问题。

Morever,Nokogiri有一些处理不同编码的功能(可能是通过Iconv),但我对此有点不熟练。

Nokogiri中,字符串始终在内部存储为UTF-8。返回文本值的方法将始终返回UTF-8编码的字符串。返回XML的方法(如to_xml,to_html和inner_html)将返回一个像源文档一样编码的字符串。

如果您希望Nokogiri正确处理文档编码,最好的办法是明确设置编码。

同样检查Windows,如果只解析普通文本或html文档,它是否表现出相同的行为? 像:

  

IRB(主):017:0> Nokogiri :: HTML.fragment('','utf-8')。text

     

IRB(主):017:0> Nokogiri.HTML( ' ').at_css(' 主体')。内容

这也可以帮助你 - http://nokogiri.org/。还检查标题在JRuby上开发