Hpricot кодировки в ruby ​​1.9 - PullRequest
       38

Hpricot кодировки в ruby ​​1.9

1 голос
/ 15 января 2011

У меня есть приложение rails3, работающее на ruby ​​1.9, и я испытываю некоторые трудности с кодировкой.

Моя задача состояла в том, чтобы открыть удаленную HTML-страницу и разобрать с нее некоторую информацию. весь мой код и база данных находятся в UTF-8, я использую код #: 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

Я попытался открыть URL, используя 'r: 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, но если кто-то знает исправление, пожалуйста.

Ответы [ 2 ]

1 голос
/ 16 августа 2012

Hpricot - UTF-8 выпуски неверная последовательность байтов в UTF-8 (ArgumentError)

require 'hpricot'
require 'open-uri'

doc = open('http://www.amazon.co.jp/') { |f| Hpricot(f.read) }

puts doc.to_html

open('http://www.amazon.co.jp/') { |f| Hpricot(f.read.encode("UTF-8")) }
0 голосов
/ 15 января 2011
a = open("someurl", "r:iso-8859-1:utf-8")

См. этот другой вопрос SO для более подробной информации ...

...