我正在查看运行相同代码的两台开发人员计算机。代码调用Web服务,使用nokogiri(两台机器上的v1.5.5)解析它,并在视图中显示结果。
一台运行Ubuntu 12.04和jruby 1.7的计算机显示预期结果。
另一个,运行Windows 7和jruby 1.7,使字符编码变得混乱(导致一堆???
而不是预期的输出。
我已经检查过两者都使用相同的jruby版本和完全相同的应用程序代码,所以我怀疑这可能与底层JVM实现有关。
我应该如何追踪这个问题?把它称为一个犹豫不决的虫子是否恰当?
答案 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上开发。