摘要:當通過open-uri將UTF-8餵給Nokogiri時,請使用open(...).read
並將生成的字符串傳遞給Nokogiri。
分析: 如果我使用curl抓取網頁,標題正確顯示Content-Type: text/html; charset=UTF-8
,文件內容包括有效UTF-8,例如"Genealogía de Jesucristo"
。但是,即使在Ruby文件和設置文檔編碼一個神奇的評論,它沒有好:
# encoding: UTF-8
require 'nokogiri'
require 'open-uri'
doc = Nokogiri::HTML(open('http://www.biblegateway.com/passage/?search=Mateo1-2&version=NVI'))
doc.encoding = 'utf-8'
h52 = doc.css('h5')[1]
puts h52.text, h52.text.encoding
#=> Genealogà a de Jesucristo
#=> UTF-8
我們可以看到,這是不是開-URI故障:
html = open('http://www.biblegateway.com/passage/?search=Mateo1-2&version=NVI')
gene = html.read[/Gene\S+/]
puts gene, gene.encoding
#=> Genealogía
#=> UTF-8
這是似乎是在處理open-uri時的一個Nokogiri問題。這可以通過將HTML作爲原始字符串引入nokogiri被工作圍繞:
# encoding: UTF-8
require 'nokogiri'
require 'open-uri'
html = open('http://www.biblegateway.com/passage/?search=Mateo1-2&version=NVI')
doc = Nokogiri::HTML(html.read)
doc.encoding = 'utf-8'
h52 = doc.css('h5')[1].text
puts h52, h52.encoding, h52 == "Genealogía de Jesucristo"
#=> Genealogía de Jesucristo
#=> UTF-8
#=> true
如果我們能夠訪問該網站的網址,我們可以對其進行測試,對於那些願意幫助的人來說,這將會有所幫助。 – 2010-04-03 19:35:10
之後你如何檢查標題以及你正在使用哪個Ruby版本? 'Rag \ 303 \ 271' _is_'Ragù'UTF-8-encoded。 – 2010-04-03 19:51:11
嗨Mladen,我使用Ruby 1.8.6。我正在從Ruby交互式控制檯檢查標題。最終,它最終被存儲在MySQL數據庫中。一旦進入MySQL,它看起來像:Ã – Moe 2010-04-03 19:59:50