Игнорировать Iconv :: IllegalSequence при использовании Ruby WWW :: Mechanize - PullRequest
4 голосов
/ 21 августа 2009

Я столкнулся с ошибкой Iconv :: IllegalSequence на некоторых веб-страницах при использовании mechanize lib. Есть ли способ заставить механизировать просто пропустить плохо закодированные символы и вернуть «вырезанную» страницу? Я знаю о связанной теме , но я бы предпочел отбросить некоторые символы на странице, а затем заново реализовать кодирование. ТИА

Ответы [ 2 ]

6 голосов
/ 26 августа 2009

Решение состоит в том, чтобы изменить строку 40 в util.rb с

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

до

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

или

Iconv.conv("#{code}//IGNORE", "UTF-8", s)
1 голос
/ 10 декабря 2012

Лучшее решение - не менять источник 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

}
...