我有一个 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 提供。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)