我正在使用 Nokogiri 和 open-uri 来获取网页上标题标签的内容,但在处理重音字符时遇到问题。处理这些问题的最佳方法是什么?这就是我正在做的:
require 'open-uri'
require 'nokogiri'
doc = Nokogiri::HTML(open(link))
title = doc.at_css("title")
此时,标题如下所示:
抹布\303\271
代替:
Ragù
我怎样才能让 nokogiri 返回正确的字符(例如本例中的 ù )?
下面是一个示例 URL:
http://www.epicurious.com/recipes/food/views/Tagliatelle-with-Duck-Ragu-242037 http://www.epicurious.com/recipes/food/views/Tagliatelle-with-Duck-Ragu-242037
Summary:当通过 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
我们可以看到这不是open-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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)