hpricot-недопустимая байтовая последовательность в UTF-8

Я уже провел некоторые поиски, но ничего из этого не может решить эту странную, неожиданную проблему. Просто посмотрите на код удара:

require 'open-uri'
require 'hpricot'
doc = Hpricot(open("http://www.baidu.com/")) #this web page's encoding is GB2312

Я не знаю, что здесь происходит, вы можете это сделать в своем IRB, чтобы увидеть, если вы можете получить проблему

Это просто всплывает "ArgumentError: неверная последовательность байтов в UTF-8"

Я попытался преобразовать оригинальный HTML в UTF-8 от Iconv, но он все равно не будет работать

Ребята, я действительно не знаю, что делать сейчас, пожалуйста, помогите мне

2 ответа

Решение

Я знаю, как это может работать с Net::HTTP (Ruby 1.9.2):

require 'net/http'
require 'uri'

url = URI.parse('http://www.baidu.com')
res = Net::HTTP.start(url.host, url.port) {|http|
  http.get('/')
}
str = res.body.force_encoding('GB2312')
puts str
puts str.encoding.name # => GB2312

Это помогает?

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")) }
Другие вопросы по тегам