python-requests,找到正确的编码

时间:2013-02-28 23:32:08

标签: python python-requests

我在阅读没有指定charset的网页时遇到问题。它包含一些非ascii字符,例如欧元货币,我的浏览器能够很好地读取它。在firefox中,在页面信息上我可以看到使用的编码是'ISO-8859-1'和渲染模式'Quirks模式'。但是,python请求无法真正解码那些非ascii字符,并且在尝试将该字符串写入文本文件时出现错误。例如:

result = requests.get(url)
result.encoding = 'ISO-8859-1'
html = result.text
open('textfile.txt', 'w').write(html)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\x80'

如果你''x80'代表'ISO-8859-1'编码的欧元货币,这应该有效

print '\x80'.decode('ISO-8859-1')

但是我得到了一个不可打印的角色,而不是欧元。

那么,该网页如何在浏览器中运行,但请求(urllib / 2)也无法处理该编码?我也试过'utf-8'但同样的事情。有什么建议吗?

1 个答案:

答案 0 :(得分:3)

问题是真正的编码是cp1252,就像你可以看到的那样:

 print '\x80'.decode('cp1252')

这个相关的答案提供了更多细节:

PHP function iconv character encoding from iso-8859-1 to utf-8

它与python无关,但它是同样的问题,并给出了为什么会发生这种情况的背景。