【发布时间】:2009-08-21 13:16:01
【问题描述】:
我在使用 mechanize lib 时在某些网页上遇到了 Iconv::IllegalSequence 错误。有没有办法让机械化只是省略错误编码的字符并返回“剪切”页面?我知道related thread,但我宁愿丢弃页面上的一些字符,然后重新实现编码猜测。 TIA
【问题讨论】:
我在使用 mechanize lib 时在某些网页上遇到了 Iconv::IllegalSequence 错误。有没有办法让机械化只是省略错误编码的字符并返回“剪切”页面?我知道related thread,但我宁愿丢弃页面上的一些字符,然后重新实现编码猜测。 TIA
【问题讨论】:
解决方法是将 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)
【讨论】:
//TRANSLIT//IGNORE 进行混合编码。检查github.com/zdavatz/spreadsheet/issues/17 和ruby.11.x6.nabble.com/…
更好的解决方案不是更改 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
}
【讨论】: