Ich habe eine Rails3-Anwendung auf Ruby 1.9 hier laufen, und ich habe einige Schmerzen machen Kodierungen arbeiten.Hprikot Kodierungen in Rubin 1.9
Meine Aufgabe war es, eine Remote-HTML-Seite zu öffnen und einige Informationen daraus zu analysieren. Alle meine Code und Datenbank sind in UTF-8, ich benutze die # Code: UTF-8, MySQL-Fix, und so weiter.
Die Seite, die ich öffne, ist in Zeichen ISO-8859-1, und wenn mein Parser storage Zeichen findet, beklagt es sein kein gültiges UTF-8.
Ich versuchte .force_encoding ("UTF-8") in allen Strings, die ich analysiert habe, aber es immer noch. Wenn ich versuche, die ganze Seite zu konvertieren, ich diese:
a = open("someurl")
b = a.read.encode("UTF-8")
Encoding::UndefinedConversionError: "\xE9" from ASCII-8BIT to UTF-8
from (irb):7:in `encode'
from (irb):7
from /Users/tscolari/.rvm/gems/ruby-1.9.2-p0/gems/railties-3.0.0/lib/rails/commands/console.rb:44:in `start'
from /Users/tscolari/.rvm/gems/ruby-1.9.2-p0/gems/railties-3.0.0/lib/rails/commands/console.rb:8:in `start'
from /Users/tscolari/.rvm/gems/ruby-1.9.2-p0/gems/railties-3.0.0/lib/rails/commands.rb:23:in `<top (required)>'
from script/rails:6:in `require'
from script/rails:6:in `<main>'
wie könnte ich dieses Problem beheben? es scheint, dass es schon schief gelaufen ist, als er die iso8859-Seite in ascii "umgewandelt" hat.
UPDATE
tryed ich die URL öffnen mit 'r: iso-8859-1: utf-8', aber anscheinend jetzt mein Problem ist mit Hpricot, dass ich für die Analyse verwendet werden.
>a = open(b, 'r:iso-8859-1:utf-8')
>a.read.encoding
=> #<Encoding:UTF-8>
> Hpricot(a).inner_html.encoding
=> #<Encoding:ASCII-8BIT>
und alle Fehler wieder ... wahrscheinlich ist dies ein Problem hpricot, aber wenn jemand eine Lösung kennt, bitte.
es besser Funktioniert, wenn Sie verwenden Nokogiri statt Hpricot? – dkarp
Nun, Sie können die inner_html mit Force_encoding in UTF-8 konvertieren, aber wenn Sie versuchen, inner_text zu verwenden, gibt Ihnen force_encoding einen Fehler. Die Arbeit besteht darin, entweder inner_html oder inner_content anstelle von inner_text zu verwenden. – Tiago
Ich werde nokogiri hier versuchen! Vielen Dank! – Tiago