簡體   English   中英

如何使用Nokogiri-scraped HTML並將其作為UTF-8輸出到終端?

[英]How do I take Nokogiri-scraped HTML and output it as UTF-8 to the terminal?

我對編程非常陌生,我正在Ruby 1.9.3中編寫一個小練習程序,使用Nokogiri用郵政編碼查詢加拿大議會網站,然后打印相應的國會議員的名字和他們的騎馬。終奌站。

我的代碼獲取頁面並隔離MP的名稱/騎行很好,但在shell中將UTF-8字符顯示為純ASCII。 我想要顯示UTF-8字符。

我知道shell可以處理UTF-8,因為:

irb> riding = "St-Jérôme"
=> "St-Jérôme"
irb> puts riding
St-Jérôme
=> nil

我用來獲取頁面的代碼:

page = Nokogiri::HTML(open("http://parl.gc.ca/ParlInfo/Compilations/HouseOfCommons/MemberByPostalCode.aspx?PostalCode=#{postalcode}"))

這是我輸入puts page時此代碼返回的示例:

<span id="ctl00_cphContent_repMP_ctl00_grdConstituencyAddress_ctl02_Label12">St-J&Atilde;&copy;r&Atilde;&acute;me</span>

所以“ St-Jérôme ”在頁面輸出中成為“ St-J&Atilde;&copy;r&Atilde;&acute;me ”,或者在終端中只是“ St-J&Atilde;&copy;r&Atilde;&acute;me ”。

也許有一種方法來轉換它,因為它存儲為字符串變量? 或者也許我可以在Nokogiri中設置一個選項,將其作為UTF-8而不是ASCII來降低?

我搜索了很長時間才在Google和Stack Overflow上找到答案,並且沒有發現任何相關或我理解的內容; 再說一次,我對此非常陌生。 如果這是重復,請指出我正確的方向。

非常感謝。

嘗試

page = Nokogiri::HTML(open("http://parl.gc.ca/ParlInfo/Compilations/HouseOfCommons/MemberByPostalCode.aspx?PostalCode=#{postalcode}"), nil, "UTF-8")

代替。 這應該將頁面解析為UTF-8並解決問題。

@BadgerPriest有答案。 原因如下:檢查Nokogiri :: HTML :: Document.parse的源代碼。

Nokogiri依賴於LibXML2來處理解析,但是LibXML2並沒有很好地確定正在解析的文檔的正確字符編碼。 Nokogiri平底鍋並默認為ASCII-8bit,這會導致多字節字符被破壞。

通過強制編碼為UTF-8,Nokogiri符合頁面的編碼,並且能夠正確地返回和/或顯示字符。

當編碼匹配其中的實際有效負載時,HTML頁面是一個真正的混合包。 看到與實際字符沒有關系的編碼是很常見的,所以我們經常要告訴Nokogiri將HTML解釋為什么。 這很難看,但它是互聯網遺留HTML“財富”的狀態。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM