Nokogiri、open-uri 和 Unicode 字符

2024-02-10

我正在使用 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(使用前将#替换为@)

Nokogiri、open-uri 和 Unicode 字符 的相关文章

  • 如何从 ruby​​ 中的字符串中删除所有非数字?

    用户输入数字的形式如下 1 800 432 4567 800 432 4567 800 432 4566 800 432 4567 1 800 432 4567 800 432 4567 我希望所有这些都变成没有特殊字符的剥离版本 例如18
  • “rmagick”gem 安装问题

    我在尝试在 centos 上安装 rmagick gem 时遇到问题 以下是我得到的输出 谁能帮我识别一下我缺少什么包裹 我已经安装了所有提到的另一个堆栈溢出线程 RMagick安装错误 https stackoverflow com qu
  • sys.maxunicode 是什么意思?

    CPython 根据编译选项在内部将 unicode 字符串存储为 utf 16 或 utf 32 在 utf 16 版本中 Python 字符串切片 迭代和len似乎适用于代码单元 而不是代码点 因此多字节字符的行为很奇怪 例如 在 CP
  • Bundle 说 gem 丢失了 - 但事实并非如此?

    背景 我正在维护contentRuby On Rails 站点 但我确实没有 Rails 的经验 当尝试运行 Rails 服务器时 rails s我明白了 在任何来源中均找不到 activesupport 3 2 0 Run bundle
  • Ruby require 'file' 不起作用,但 require './file' 可以。为什么?

    我有一个充满 ruby 文件的文件夹 当我尝试使用位于同一目录中的另一个文件中的一个文件时require file 我得到一个LoadError但是当我使用require file 一切正常 有人可以向我解释为什么会发生这种情况吗 如果有什
  • RoR - Rails 中的大文件上传

    我有一个 Rails Web 应用程序 允许用户上传视频 视频存储在 NFS 安装的目录中 当前的设置适用于较小的文件 但我也需要支持大文件上传 最多 4GB 当我尝试上传 4GB 文件时 它最终会发生 但从用户体验的角度来看很糟糕 上传开
  • 如何使用 net/http 验证 ruby​​ 中的 SSL 证书链

    我如何验证网站的证书 例如https processing ukash com https processing ukash com 在 ruby 中使用 net http https Net HTTP new processing uka
  • 使用rSpec 测试delayed_job 链的最佳方法是什么?

    目前 当我的代码中有一个延迟方法时 如下所示 CommentMailer delay deliver comments comment true 我在规范中写了这样的内容 dj mock DelayProxy CommentMailer s
  • 如何在 SVG 中显示 unicode?

    以 SVG 格式存储在数据库中的信息 如果数据包含文本 它将显示为 Unicode 有必要在浏览器中正确显示 SVG 文件
  • 在 Sinatra 中运行后台进程

    我有 Sinatra Rails 应用程序和一个启动一些漫长过程的操作 通常我会为后台作业排队 但这种情况太简单了 后台进程很少启动 所以队列是一个开销 那么如何在没有队列的情况下运行后台进程呢 get build logs project
  • 如何解决 PDFBox 没有 unicode 映射错误?

    我有一个现有的 PDF 文件 我想使用 python 脚本将其转换为 Excel 文件 目前正在使用PDFBox 但是存在多个类似以下错误 org apache pdfbox pdmodel font PDType0Font toUnico
  • 比较 ruby​​ 哈希值[重复]

    这个问题在这里已经有答案了 可能的重复 如何比较两个哈希值 https stackoverflow com questions 4928789 how do i compare two hashes 我有两个 ruby 哈希值 本质上是模型
  • 如何处理 Nokogiri 中的 404 未找到错误

    我正在使用 Nokogiri 来抓取网页 很少有 url 需要猜测 当它们不存在时 会返回 404 未找到错误 有没有办法捕获这个异常 http yoursite page 38475 gt page number 38475 doesn
  • Python Scrapy:allowed_domains从数据库添加新域

    我需要向 allowed domains 添加更多域 因此我没有收到 已过滤的异地请求 我的应用程序获取从数据库获取的网址 因此我无法手动添加它们 我试图覆盖蜘蛛init 像这样 def init self super CrawlSpide
  • Java正则表达式:为什么数字[0-9]、逗号等不是unicode?

    class Test public static void main String args String regex p L System out println 0 matches regex 上面的代码打印 false 但我期待 tr
  • 如何将文件的元素放入哈希中? -红宝石

    所以我有一个以下形式的文件 Key1 Value1 Key2 Value2 Key3 Value3 用制表符分隔 我的问题是如何打开这个文件并将其放入哈希中 我曾尝试这样做 fp File open file path fp each do
  • Ruby:如何在不创建新实例的情况下检查实例方法的参数?

    在 Ruby 1 9 2 中 您可以使用 method symbol 检查任何方法的参数 如何在不创建新车的情况下检查 Car initialize 方法 class Car def initialize fuel type passeng
  • ruby 中 Array#uniq 方法的时间复杂度是多少?

    谁能告诉我 ruby 内部使用哪种算法来使用 ruby 数组删除重复项Array uniq method 来自docs http www ruby doc org core 1 9 3 Array html static VALUE rb
  • 通过 ruby​​ 进程共享变量

    我正在编写一个 gem 其中我必须分叉两个进程来启动两个 webrick 服务器 我想通过基类的类方法启动该服务器 因为应该只运行这两个服务器 而不是多个服务器 在运行时 我想调用这两台服务器上的一些方法来更改变量 我的问题是 我无法通过基
  • 更改 en.yml 文件中的属性名称不起作用

    我更改了 ruby on Rails 项目中 en yml 文件中的属性名称 按钮工作正常 但字段属性并没有改变 这是我的模型 class Enr AffordableWarmth lt ActiveRecord Base self tab

随机推荐

  • 在 Optimus 笔记本电脑中以编程方式强制使用 NVIDIA GPU

    我正在编写 DirectX 游戏 当我在 Optimus 笔记本电脑上运行它时 会使用 Intel GPU 导致性能非常糟糕 如果我使用上下文菜单或将可执行文件重命名为 bf3 exe 或其他一些著名的游戏可执行文件名称来强制使用 NVID
  • 在android中使用串口RS-232?

    我想在 Android 设备上使用 JavaComm API 类通过串行端口发送信号 我的想象如下 1 Android 设备为 Archos 3 2 具有 android 2 2 和 USB 主机模式 2 在我的 Android 应用程序中
  • 如何以编程方式启动本地 DynamoDB?

    我能够启动一个local通过以下命令从 bash 启动 DynamoDB 服务器 java Djava library path DynamoDBLocal lib jar DynamoDBLocal jar sharedDb 是否没有一种
  • JavaScript 操作后获取 HTML 源代码

    怎么才能满啊 网页的 HTML 源代码 在运行一些对 HTML 源代码进行操作的 JavaScript 代码之后 我正在使用 VB Net 的 WebbrowserControl 我想为我的自定义 webbrowsercontrol 创建一
  • 将参数传递给使用 chrome.tabs.executeScript() 注入的内容脚本

    如何将参数传递给使用以下方式注入的内容脚本文件中的 JavaScript chrome tabs executeScript tab id file content js 不存在 将参数传递给文件 这样的事情 你什么can要做的就是插入内容
  • 从视图检索数据,我应该使用模型绑定器吗?

    我在这里有点迷失 因为我没有真正看过模型活页夹 所以如果可能的话 如果我真的正确地考虑了我的问题 可以告诉我 如果我的代码是这样的 请建议 1 我有一个 DTO 类 其中包含 自定义字段 每个字段都有名称和其他属性 即 Public Cla
  • 如何从字节数组构造颜色?

    我正在努力完成非常简单的任务 嗯 我认为是这样 我有byte 4 表示颜色值的数组 例如byte 0 alpha byte 1 red等等 如何将此字节数组转换为实际的颜色对象 感谢您的答复 Java 中的字节是有符号的 因此正数部分只能保
  • PyCharm 中的“继承全局站点包”是什么意思?

    当创建一个新的Python项目时 为什么我要选择这个选项 如果我不选择它 我会错过什么功能 我是否无法导入某些 Python 模块 其他答案都不太准确 继承全局站点包 不会 预安装 或 添加包 到您的虚拟环境中 设置为您提供虚拟环境访问权限
  • 如何本地化关键 UIApplicationShortcutItemTitle

    我应该如何本地化密钥UIApplicationShortcutItemTitle 我知道本地化对于像这样的键是如何工作的NSLocationUsageDescription and NSLocationAlwaysUsageDescript
  • 如何在 activeadmin 下拉菜单中的 # 上显示模型标题?

    我创建了一个关联 其中项目有很多任务并且任务属于项目 我已经在 admin tasks rb 中创建了表单 form do f f inputs Details do f input title f input project end f
  • 迭代器只能迭代一次吗? [复制]

    这个问题在这里已经有答案了 考虑以下示例 def foo iterator return sum iterator max iterator 重复使用同一个迭代器两次是否安全 不 这不安全 迭代器不是序列 这就是发生的事情foo 使用生成器
  • 如何在 Spring Security 中配置资源服务器以使用 JWT 令牌中的附加信息

    我有一个 oauth2 jwt 令牌服务器 配置为设置有关用户权限的附加信息 Configuration Component public class CustomTokenEnhancer extends JwtAccessTokenCo
  • aws lambda 调用未在 POST 上填充正文

    感谢 EVK 对我之前的问题的帮助 可以使用 API GET 但不能使用 API POST https stackoverflow com questions 49665248 can use api get but not api pos
  • 如何使用army bear common lisp 创建jar?

    我想知道是否可以使用army bear common lisp 创建一个jar 文件 如果可以的话该怎么做 换句话说 我有以下代码 格式为 Hello World 我可以在armed bear common lisp中运行它 我想知道如何创
  • 停止失控的 Lua 子进程

    我使用 LuaObjCBridge 将 Lua 嵌入到 Objective C 应用程序中 我需要知道如何停止 Lua 进程 如果它花费太多时间 无限循环 在单独的线程中运行它会有帮助吗 通常的方法是使用lua sethook http w
  • Ember.js 绑定模型存储在数组中

    当模型存储在数组中时 从一个模型绑定到另一个模型的 正确 方法是什么 通常我会想象这将是控制器的content数组 但为了保持示例简单 MyApp websites MyApp websites push Ember Object crea
  • 使用 R 中函数的额外参数进行归约[重复]

    这个问题在这里已经有答案了 我正在尝试使用ReduceR 中的函数使用merge跨多个数据帧的功能 问题是 我想将合并函数与参数一起使用all T 并且似乎没有地方可以在高阶中指定这一点Reduce功能 所以我想 a lt data fra
  • 如何在 setInterval ajax Web 服务调用中阻止 ASP.net 表单身份验证/会话更新?

    我编写了一个控件 其中包含一个 javascript 组件和一个 Web 服务组件 我遇到的问题是 javascript 设置为 setInterval this checkAlertsHandler this messageCheckIn
  • 条码字体与条码打印机字体有什么区别

    有人知道条形码字体 在报告中用作字体 和直接从条形码打印机打印的字体之间的区别吗 为什么条码字体前后要加星号 据我了解 当我们使用条形码打印机时 我们不需要它 为什么不呢 星号字符是规范的一部分Code 39 http en wikiped
  • Nokogiri、open-uri 和 Unicode 字符

    我正在使用 Nokogiri 和 open uri 来获取网页上标题标签的内容 但在处理重音字符时遇到问题 处理这些问题的最佳方法是什么 这就是我正在做的 require open uri require nokogiri doc Noko