【问题标题】:Strange characters returned after screen scraping using Ruby/Nokogiri?使用 Ruby/Nokogiri 抓取屏幕后返回的奇怪字符?
【发布时间】:2014-07-19 07:14:18
【问题描述】:

我正在使用 Ruby 和 Nokogiri 从客户的旧系统中抓取数据。

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

Diet™ 变成 Dietâ¢

我很确定这只是一个编码问题,我很确定 Ruby 有一个简单的方法来处理它,但是在谷歌搜索并尝试了一些明显的选项之后,我并没有更接近。

提前致谢!

【问题讨论】:

标签: ruby screen-scraping nokogiri


【解决方案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)

地点:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多