我使用Nokogiri和open在网页上获取标题标签的内容,但是在重音字符方面有问题。处理这些问题最好的方法是什么?我正在做的事情是:
require 'open-uri'
require 'nokogiri'
doc = Nokogiri::HTML(open(link))
title = doc.at_css("title")此时,标题如下:
Rag\303\271
而不是:
Rag 15个
我怎样才能让nokogiri返回正确的角色(例如,在这种情况下)?
下面是一个URL示例:
http://www.epicurious.com/recipes/food/views/Tagliatelle-with-Duck-Ragu-242037
发布于 2010-04-03 20:06:52
当你说“看起来像这样”时,你是在查看这个值IRB吗?它将使用表示字符的字节序列的C样式转义来转义非ASCII范围字符。
如果您使用puts打印它们,您将像预期的那样返回它们,假设您的shell控制台使用的编码与所讨论的字符串相同(在本例中,基于该字符返回的两个字节,显然是UTF-8 )。如果将值存储在文本文件中,打印到句柄上也应该会产生UTF-8序列。
如果您需要在UTF-8和其他编码之间进行转换,那么具体情况取决于您使用的是Ruby1.9还是1.8.6。
对于1.9:http://blog.grayproductions.net/articles/ruby_19s_string 1.8,您可能需要查看Iconv。
此外,如果您需要与Windows中的COM组件交互,则需要告诉ruby使用正确的编码方式,如下所示:
require 'win32ole'
WIN32OLE.codepage = WIN32OLE::CP_UTF8如果要与mysql交互,则需要将表上的排序规则设置为支持正在使用的编码的排序规则。通常,最好将排序规则设置为UTF-8,即使您的一些内容正在以其他编码形式返回;您只需要根据需要进行转换。
Nokogiri有一些处理不同编码的特性(可能是通过Iconv),但是我有点不习惯,所以我会让其他人来解释。
发布于 2011-01-15 20:47:21
摘要:在通过open向Nokogiri提供UTF-8时,使用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的错:
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这是一个诺科吉里的问题,当处理开放-uri,似乎。这可以通过将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发布于 2011-01-24 13:37:24
我也有同样的问题,而Iconv的方法不起作用。Nokogiri::HTML是Nokogiri::HTML.parse(thing, url, encoding, options)的别名。
所以,你只需要做:
doc = Nokogiri::HTML(open(link).read, nil, 'utf-8')
它将正确地将页面编码转换为utf-8。您将看到Ragù而不是Rag\303\271。
https://stackoverflow.com/questions/2572396
复制相似问题