несовместимые кодировки символов: ASCII-8BIT и UTF-8 в Oga gem

#ruby #encoding #utf-8 #html-parsing

#ruby #кодирование #utf-8 #html-синтаксический анализ

Вопрос:

Я использую анализатор XML / HTML под названием Oga.

Я пытаюсь сканировать этот URL: http://www.johnvanderlyn.com и проанализируйте тело для текста, вот так:

  def get_page
    body = Net::HTTP.get(URI.parse(@url))
    document = Oga.parse_html(body)
  end

document = get_page    
words = document.css('body').text
 

Когда я получаю эту ошибку:

/gems/oga-2.7/lib/oga/xml/node_set.rb:276:in block in text': incompatible character encodings: ASCII-8BIT and UTF-8 (Encoding::CompatibilityError)

Это связано с этим фрагментом кода здесь.

Что может быть причиной этого и как я могу это исправить? Есть ли у меня способ исправить это локально, или мне нужно разветвить gem, исправить этот метод, а затем использовать мой fork?

Мысли?

Комментарии:

1. Я только что выполнил приведенный выше код без каких-либо проблем. Связанный вами фрагмент кода не имеет никакого отношения к сбою, то есть проблема body интерпретируется в неправильной кодировке. Попробуйте body = body.force_encoding 'UTF-8' перед анализом документа.

2. @mudasobwa Идеально. Это работает блестяще. Если вы добавите это в качестве ответа, и я приму его!

Ответ №1:

Фрагмент кода, который вы связали, не имеет никакого отношения к сбою, то есть проблема с телом интерпретируется в неправильной кодировке. Попробуйте добавить body = body.force_encoding 'UTF-8' перед анализом документа:

 def get_page
  body = Net::HTTP.get(URI.parse(@url)).force_encoding 'UTF-8'
  document = Oga.parse_html(body)
end