我有一个 Sinatra 应用程序 ( http://analyzethis.espace-technologies.com ) 执行以下操作
- 检索 HTML 页面(通过 net/http)
- 从 response.body 创建一个 Nokogiri 文档
- 提取一些信息并在响应中发回。响应应采用 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/