Похоже, это проблема с тем, что Нокогири ожидает в качестве параметров вызываемого метода синтаксического анализа. Первая проблема, которую я вижу, заключается в том, что вы передаете опцию кодирования в неправильный слот параметра,
A пример анализа со страницы проекта Nokogiri, в котором указана кодировка
Nokogiri.XML('<foo><bar /><foo>', nil, 'EUC-JP')
Обратите внимание, что кодировка является третьим параметром, а не вторым. Но это все еще не полностью объясняет поведение, которое вы видите, поскольку кодировка должна просто игнорироваться.
Согласно документации Nokogiri, вызов Nokogiri :: HTML () - это удобный метод для метода разбора.
Код для Nokogiri :: HTML :: parse
def parse thing, url = nil, encoding = nil, options = XML::ParseOptions::DEFAULT_HTML, &block
document.parse(thing, url, encoding, options, &block)
end
Источник для метода синтаксического анализа Nokogiri :: HTML :: Document немного длинный, но здесь есть важная часть:
string_or_io.respond_to?(:encoding)
unless string_or_io.encoding.name == "ASCII-8BIT"
encoding ||= string_or_io.encoding.name
end
end
Обратите внимание string_or_io.encoding.name , соответствует ошибке вашей пилы, неопределенное имя метода для "UTF-8": String (NoMethodError) .
Имеет ли ваш объект search_results атрибут с парой значений ключей {: encoding => 'UTF-8'}? Похоже, что Нокогири ищет кодировку для хранения объекта, который затем имеет атрибут имени «UTF-8».