Używam Rails 5 z Ruby 4.2 i skanuję dokument, który analizowałem z Nokogiri, szukając w sposób niewrażliwy na wielkość liter z linkiem z tekstem:Jak uniknąć "Nieprawidłowej sekwencji bajtów", szukając linku z tekstem za pomocą Nokogiri
a_elt = doc ? doc.xpath('//a').detect { |node| /link[[:space:]]+text/i === node.text } : nil
Po otrzymaniu kodu HTML mojej stronie internetowej w content
, I analizować je w doc nokogiri używając:
doc = Nokogiri::HTML(content)
problem polega na tym, dostaję
ArgumentError invalid byte sequence in UTF-8
na niektórych stronach internetowych przy użyciu powyższego wyrażenia regularnego.
2.4.0 :002 > doc.encoding
=> "UTF-8"
2.4.0 :003 > doc.xpath('//a').detect { |node| /individual[[:space:]]+results/i === node.text }
ArgumentError: invalid byte sequence in UTF-8
from (irb):3:in `==='
from (irb):3:in `block in irb_binding'
from /Users/davea/.rvm/gems/[email protected]/gems/nokogiri-1.7.0/lib/nokogiri/xml/node_set.rb:187:in `block in each'
from /Users/davea/.rvm/gems/[email protected]/gems/nokogiri-1.7.0/lib/nokogiri/xml/node_set.rb:186:in `upto'
from /Users/davea/.rvm/gems/[email protected]/gems/nokogiri-1.7.0/lib/nokogiri/xml/node_set.rb:186:in `each'
from (irb):3:in `detect'
from (irb):3
from /Users/davea/.rvm/gems/[email protected]/gems/railties-5.0.1/lib/rails/commands/console.rb:65:in `start'
from /Users/davea/.rvm/gems/[email protected]/gems/railties-5.0.1/lib/rails/commands/console_helper.rb:9:in `start'
from /Users/davea/.rvm/gems/[email protected]/gems/railties-5.0.1/lib/rails/commands/commands_tasks.rb:78:in `console'
from /Users/davea/.rvm/gems/[email protected]/gems/railties-5.0.1/lib/rails/commands/commands_tasks.rb:49:in `run_command!'
from /Users/davea/.rvm/gems/[email protected]/gems/railties-5.0.1/lib/rails/commands.rb:18:in `<top (required)>'
from bin/rails:4:in `require'
from bin/rails:4:in `<main>'
Czy jest sposób, w jaki mogę przepisać powyższe dane, aby automatycznie zakodować kodowanie lub dziwne znaki, a nie odrzucać?
Proszę przeczytać "[mcve]". Pytając o problem z kodem, musimy zobaczyć minimalny kod i minimalne dane wejściowe, które demonstrują problem. Twój pierwszy wiersz kodu jest wątpliwy i sugeruje, że kod przed nim nie jest napisany wyraźnie, ale, oczywiście, nie widząc go, nie możemy ci tam pomóc. W Internecie dziko bardzo często można znaleźć strony, które nie zostały wygenerowane poprawnie lub czysto, często zawierające znaki, które zostały wprowadzone za pomocą klawiatury na maszynach Windows, powodując wprowadzenie znaków ISO-8859-1 lub Win-1252 do tekstu. Konwertuj te przed analizą. –