代码之家  ›  专栏  ›  技术社区  ›  Fluffy

使用ruby www::mechanize时忽略iconv::illegalSequence

  •  4
  • Fluffy  · 技术社区  · 16 年前

    在使用机械化库时,我在一些网页上遇到了ICONV::Illegalsequence错误。有没有一种方法可以让机械化忽略错误编码的字符并返回“剪切”页?我知道 related thread 但我宁愿丢弃页面上的一些字符,然后重新实现编码猜测。蒂亚

    2 回复  |  直到 13 年前
        1
  •  6
  •   Fluffy    16 年前

    解决方案是将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)
    
        2
  •  1
  •   karwan    13 年前

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