У меня есть документ, похожий на этот ( обратите внимание на заголовок ):
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:fb="http://www.facebook.com/2008/fbml">
<head>
<title>Sã�ng Title</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<div id="container">
Some Text
</div>
</body>
</html>
Когда я получаю этот документ, используя Nokogiri, используя этот код:
require 'nokogiri'
require 'open-uri'
doc = Nokogiri::HTML(open(url).read)
Результат от Нокогири таков:
ruby-1.9.2-p290 :060 > pp doc
#(Document:0x82e5ed2c {
name = "document",
children = [
#(DTD:0x82e5e994 { name = "HTML" }),
#(Element:0x82e5e0c0 {
name = "html",
attributes = [
#(Attr:0x82e5e05c {
name = "xmlns",
value = "http://www.w3.org/1999/xhtml"
}),
#(Attr:0x82e5e048 {
name = "xmlns:fb",
value = "http://www.facebook.com/2008/fbml"
})],
children = [
#(Element:0x82e5d8dc {
name = "head",
children = [
#(Element:0x82e5d6d4 {
name = "title",
children = [ #(Text "Sã")]
})]
})]
})]
})
Мне кажется, что персонаж ПОСЛЕ "Sã" заставляет нокогири просто задохнуться и подумать, что документ окончен. Как видите, #content div вообще не включено.
Кто-нибудь знает, как справиться с этой ситуацией?
Это убивает меня ... Спасибо !!
Edit:
После дальнейших исследований я обнаружил, что фактическим персонажем, вызывающим удушье, является нулевой символ Unicode "\ u0000".
Прямо сейчас я думаю, что могу сделать что-то вроде этого:
page_content = open(url).read
# Remove null character
page_content.gsub!(/\u0000/, '')
Nokogiri::HTML(page_content)