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

问题描述:

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

+0

非常感谢! – 2010-12-24 08:24:09

的解决方案是在从util.rb

Iconv.iconv(code, "UTF-8", s).join("") 

线改变40〜

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

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

另外考虑使用'// TRANSLIT // IGNORE'进行混合编码。 检查https://github.com/zdavatz/spreadsheet/issues/17和 http://ruby.11.x6.nabble.com/Reliable-character-encodings-conversion-td3332842.html – Khaled 2013-06-04 11:53:04

更好的方案是不改变的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 

}