如何让 Mechanize 自动将正文转换为 UTF8?

Dmi*_*kin 5 ruby mechanize utf-8

我找到了一些使用post_connect_hook和 的解决方案pre_connect_hook,但似乎它们不起作用。我正在使用最新的 Mechanize 版本 (2.1)。新版本没有[:response]字段,不知道新版本从哪里获取。

是否可以使 Mechanize 返回 UTF8 编码版本,而不必使用 手动转换它iconv

nag*_*ya0 3

自 Mechanize 2.0 以来,pre_connect_hooks()和的参数post_connect_hooks()发生了变化。

\n

请参阅机械化文档:

\n
\n

pre_connect_hooks()

\n

在检索响应之前要调用的挂钩列表。使用代理、URI、响应和响应正文来调用挂钩。

\n
\n

\xe3\x80\x80

\n
\n

post_connect_hooks()

\n

检索响应后要调用的挂钩列表。使用代理、URI、响应和响应正文来调用挂钩。

\n
\n

现在您无法更改内部响应主体值,因为参数不是数组。因此,下一个最佳方法是用您自己的解析器替换内部解析器:

\n
class MyParser\n  def self.parse(thing, url = nil, encoding = nil, options = Nokogiri::XML::ParseOptions::DEFAULT_HTML, &block)\n    # insert your conversion code here. For example:\n    # thing = NKF.nkf("-wm0X", thing).sub(/Shift_JIS/,"utf-8") # you need to rewrite content charset if it exists.\n    Nokogiri::HTML::Document.parse(thing, url, encoding, options, &block)\n  end\nend\n\nagent = Mechanize.new\nagent.html_parser = MyParser\npage = agent.get(\'http://somewhere.com/\')\n...\n
Run Code Online (Sandbox Code Playgroud)\n