#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