使用Ruby WWW :: Mechanize时忽略Iconv :: IllegalSequence

时间:2009-08-21 13:16:02

标签: ruby mechanize

使用mechanize lib时,我在某些网页上遇到了Iconv :: IllegalSequence错误。有没有办法让机械化只是省略不良编码字符并返回“剪切”页面?我知道related thread,但我宁愿丢弃页面上的一些字符,然后重新实现编码猜测。 TIA

2 个答案:

答案 0 :(得分:6)

解决方案是从

更改util.rb中的第40行
Iconv.iconv(code, "UTF-8", s).join("")

Iconv.iconv("#{code}//IGNORE", "UTF-8", s).join("")

Iconv.conv("#{code}//IGNORE", "UTF-8", s)

答案 1 :(得分:1)

更好的解决方案不是改变util.rb的来源,而是在你自己的代码中加入类似的东西:

Mechanize::Util.send(:define_method, 'self.encode_to' ) { |*args|
  encoding = args[0]
  str = args[1]

  if NEW_RUBY_ENCODING
    str.encode(encoding)
  else
    Iconv.conv(encoding.to_s + '//IGNORE', "UTF-8", str)
  end

}