0

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

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

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

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

我应该如何去追踪这个问题?将其称为 jruby 错误是否合适?

4

1 回答 1

0

如果两台机器上的代码相同,那么您的任何捆绑 gem 在 Windows 上都可能与该代码不兼容。在从 Ubuntu 移动代码后,我之前也遇到过许多与 windows 上的 gem 相关的问题。

在 Ubuntu 上,用于 gems 的 sudo install 命令自行安装 gems 和依赖项,无需下载任何其他内容,但在 Windows 上,具有依赖项的 gem 安装需要手动安装才能正常工作。

请检查 Windows 上任何 gem 的任何兼容性问题。此外,我怀疑 jruby 会导致错误,因为我在 windows 上的应用程序中也使用了 nokogiri,之前没有任何问题。

此外,Nokogiri具有处理不同编码的一些功能(可能通过 Iconv),但我对此有点不习惯。

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

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

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

irb(main):017:0> Nokogiri::HTML.fragment(' ', 'utf-8').text

irb(main):017:0> Nokogiri.HTML('').at_css('body').content

这也可能对您有所帮助 - http://nokogiri.org/。还可以查看标题Developing on JRuby

于 2012-12-05T09:29:23.503 回答