2011-08-01 27 views
1

私はすでにいくつかの検索を行っていますが、この特有の予期しない問題は解決できません。 だけで、コードの打撃を見て:hpricot - UTF-8での無効なバイトシーケンス

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

私はここで何が起こっているのか分からない、あなたは

は、それはちょうど「と、ArgumentErrorをポップアップ表示の問題を得ることができる場合、あなたのIRBでこれを見てすることができます: UTF-8" での無効なバイトシーケンス

私はIconvにでUTF-8に元のHTMLを変換しようとしているが、それはまだ私は本当に、今何をすべきかしてくださいません

みんなが、動作しません。助けてください

答えて

0

私はそれがネットで仕事ができる方法を知っている:: HTTP(ルビー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 

はその助けをしていますか?

+1

次の操作を行います。Hpricot(STR)、strがあなたのcode.Iでstrはまだ例外ArgumentErrorを持っている:無効UTF-8でのバイトシーケンス – castiel

+0

申し訳ありませんが、Hpricotは分かりませんが、Net :: HTTPでは動作しますか? – emboss

+1

はい、確かに、Net :: HTTPで働いていて、私のproblem.use ICONVにソリューションを提供しています。Iconv.new( "UTF-8 // IGNORE"、 "gb2312")。それにIGNOREを追加する必要があることが重要です – castiel

3

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")) } 
関連する問題