У меня есть приложение rails3, работающее на ruby 1.9 здесь, и у меня есть некоторые боли, делающие кодировки.Hpricot encodings in ruby 1.9
Моя задача состояла в том, чтобы открыть удаленную страницу html и проанализировать с нее некоторую информацию. все мои коды и базы данных находятся в UTF-8, im используя код # UTF-8, mysql и т. Д.
Страница, которую я открываю, находится в кодировке ISO-8859-1, и когда мой синтаксический анализатор набирает персонажей, он жалуется на недействительный UTF-8.
Я попытался использовать .force_encoding («UTF-8») во всех строках, которые я проанализировал, но это все еще. Когда я пытаюсь преобразовать всю страницу, я получаю это:
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>'
как я могу это исправить? кажется, что это уже пошло не так, когда он «превратил» страницу iso8859 в ascii.
UPDATE
I судимое открытие URL, используя 'г: ISO-8859-1: UTF-8', но, видимо, моя проблема сейчас с Hpricot, который я использую для синтаксического анализа.
>a = open(b, 'r:iso-8859-1:utf-8')
>a.read.encoding
=> #<Encoding:UTF-8>
> Hpricot(a).inner_html.encoding
=> #<Encoding:ASCII-8BIT>
и все ошибки снова ... наверное, это вопрос Hpricot, но если кто-нибудь знает, исправить, пожалуйста.
Работает ли лучше, если вы используете nokogiri вместо hpricot? – dkarp
ну, вы можете преобразовать inner_html в UTF-8 с помощью force_encoding, но если вы попытаетесь использовать inner_text, force_encoding даст вам ошибку. Работа вокруг заключается в использовании inner_html или inner_content вместо inner_text – Tiago
. Я дам nokogiri попробовать здесь! благодаря! – Tiago