ruby - 如何将 Net::HTTP 响应转换为 Ruby 1.9.1 中的特定编码?

标签 ruby http encoding sinatra ruby-1.9

我有一个 Sinatra 应用程序 ( http://analyzethis.espace-technologies.com ) 执行以下操作

  1. 检索 HTML 页面(通过 net/http)
  2. 从 response.body 创建一个 Nokogiri 文档
  3. 提取一些信息并在响应中发回。响应应采用 UTF-8 编码

所以我在尝试阅读使用 windows-1256 编码的网站(如 www.filfan.com 或 www.masrawy.com)时遇到了问题。

问题是编码转换的结果不正确,虽然没有抛出错误。

net/http response.body.encoding 给出了ASCII-8BIT,无法转换为UTF-8

如果我执行 Nokogiri::HTML(response.body) 并使用 css 选择器从页面获取某些内容 - 例如标题标签的内容 - 我会得到一个字符串,当我调用 string.encoding 时返回WINDOWS-1256。我使用 string.encode("utf-8") 并使用它发送响应,但响应还是不正确。

对我的方法有什么问题有什么建议或想法吗?

最佳答案

因为 Net::HTTP 没有正确处理编码。参见 http://bugs.ruby-lang.org/issues/2567

您可以解析包含字符集的 response['content-type'] 而不是解析整个 response.body

然后使用force_encoding()设置正确的编码。

response.body.force_encoding("UTF-8") 如果网站以 UTF-8 提供。

关于ruby - 如何将 Net::HTTP 响应转换为 Ruby 1.9.1 中的特定编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1207335/

相关文章:

ruby-on-rails - 如何使用 Foreman 正确关闭和转储 Redis 服务器?

ruby - 在 Ruby 中的不同数组的特定位置从单个字符创建数组

php - 将 utf-8 编码的参数从 PHP 传递给 casper JS

mysql - 导入sql文件时出现UTF-8编码问题

ruby - Mechanize 无法正确解析字段

ruby - 除了 ClientIP 之外,还有其他方法可以为 kubernetes 中的 sessionAffinity 提供自定义值吗?

ios - 火力地堡 : Access the database from URL

http - 在 Erlang 中读取接收到的 HTTP 请求的主体

php - 从网站上传后,文件可以在 FTP 中打开,但不能在 HTTP 中打开

swift - NSAttributedString 在初始化时崩溃,但为什么呢?