2009-08-21 13 views
4

機械化されたlibを使用すると、一部のWebページでIconv :: IllegalSequenceエラーが発生しました。機械化して、エンコードされた文字を省略し、「切り取った」ページを返す方法はありますか?私はrelated threadを知っていますが、私はむしろページ上のいくつかの文字を破棄して、エンコーディング推測を再実装したいと思います。 TIARubyを使用中にIconv :: IllegalSequenceを無視します。WWW :: Mechanize

+0

ありがとうございました! –

答えて

6

溶液を

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

1

よりよい解決策に

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

からutil.rbにライン40を変更することである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 

}