gpt4 book ai didi

ruby - Nokogiri、open-uri 和 Unicode 字符

转载 作者:数据小太阳 更新时间:2023-10-29 06:27:46 25 4
gpt4 key购买 nike

我正在使用 Nokogiri 和 open-uri 来抓取网页上标题标签的内容,但在处理重音字符时遇到了问题。处理这些问题的最佳方法是什么?这是我正在做的:

require 'open-uri'
require 'nokogiri'

doc = Nokogiri::HTML(open(link))
title = doc.at_css("title")

此时,标题看起来是这样的:

Rag\303\271

代替:

Ragù

我怎样才能让 nokogiri 返回正确的字符(例如本例中的 ù)?

这是一个示例网址:

http://www.epicurious.com/recipes/food/views/Tagliatelle-with-Duck-Ragu-242037

最佳答案

总结当通过 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

关于ruby - Nokogiri、open-uri 和 Unicode 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2572396/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com