使用Ruby / Nokogiri进行屏幕抓取后返回奇怪的字符?

时间:2014-05-29 17:19:08

标签: ruby screen-scraping nokogiri

我使用Ruby和Nokogiri从客户端的遗留系统中删除数据。

我收到的文字包含商标符号。但是当我在控制台上显示它或将其保存到数据库时,TM会转换为不同的字符。

Diet™成为Dietâ¢

我非常确定它只是一个编码问题而且我非常确定Ruby有一种简单的方法来处理它,但经过几分钟的谷歌搜索和尝试一些明显的选项,我没有更近的。

提前致谢!

1 个答案:

答案 0 :(得分:1)

您的编码不匹配,但您还没有告诉我们足够的帮助。

要检查的事项:

  • 服务器说他们的页面是什么编码?它将在返回的HTTPD标头中。
  • 文档是否真的编码为服务器所说的,或者是否有不在该代码集中的字符?

通常,您将获得UTF-8,ISO-8859-1或Win-1252等文档,因此请尝试使用这些值为Nokogiri提供一些提示。 Nokogiri::HTML.parse的文档说:

parse(thing, url = nil, encoding = nil, options = XML::ParseOptions::DEFAULT_HTML, &block)

其中:

  

编码是处理文档时应该使用的编码。

找出服务器发送回的内容的一种方法是:

require 'open-uri'
open('http://www.example.net') { |io| io.charset }
# => "iso-8859-1"

警告:服务器发回的内容不一定是内容的真实内容,因此它只是一个初步提示。返回的文件可以是任何内容,此时您可以自己弄清楚它是什么。

通常我们使用Nokogiri::HTML('some html to parse'),但您可以使用:

Nokogiri::HTML('some html to parse', nil, 'UTF-8') 

查看Ruby的编码以找出可用的代码集是什么:

Encoding.constants