亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

ruby 1.9:UTF-8中的無效字節序列

ruby 1.9:UTF-8中的無效字節序列

揚帆大魚 2019-10-05 15:32:20
我正在用Ruby(1.9)編寫一個爬蟲,該爬蟲使用了來自許多隨機站點的大量HTML。嘗試提取鏈接時,我決定只使用.scan(/href="(.*?)"/i)nokogiri / hpricot(主要是提高速度)。問題是我現在收到很多“ invalid byte sequence in UTF-8”錯誤。據我了解,該net/http庫沒有任何特定于編碼的選項,并且進來的東西基本上沒有正確標記。實際使用該傳入數據的最佳方法是什么?我嘗試.encode設置了replace和invalid選項,但到目前為止沒有成功...
查看完整描述

4 回答

?
藍山帝景

TA貢獻1843條經驗 獲得超7個贊

我建議您使用HTML解析器。只要找到最快的一個。


解析HTML并不像看起來那樣容易。


瀏覽器會在UTF-8 HTML文檔中解析無效的UTF-8序列,只需將“ ...”符號放入即可。因此,一旦解析了HTML中的無效UTF-8序列,生成的文本便是有效字符串。


即使在屬性值內部,您也必須解碼amp等HTML實體


這是一個很好的問題,總結了為什么不能可靠地使用正則表達式解析HTML: RegEx匹配除XHTML自包含標簽之外的其他打開標簽


查看完整回答
反對 回復 2019-10-05
?
慕的地6264312

TA貢獻1817條經驗 獲得超6個贊

attachment = file.read


begin

   # Try it as UTF-8 directly

   cleaned = attachment.dup.force_encoding('UTF-8')

   unless cleaned.valid_encoding?

     # Some of it might be old Windows code page

     cleaned = attachment.encode( 'UTF-8', 'Windows-1252' )

   end

   attachment = cleaned

 rescue EncodingError

   # Force it to UTF-8, throwing out invalid bits

   attachment = attachment.force_encoding("ISO-8859-1").encode("utf-8", replace: nil)

 end


查看完整回答
反對 回復 2019-10-05
  • 4 回答
  • 0 關注
  • 717 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號