Request库的文档说,requests.get()方法总是返回unicode。但是当我试图知道返回的是什么编码时,我看到了“windows-1251”。那是个问题。当我尝试获取requests.get(url).text时,会出现错误,因为当前url的内容有一个西里尔符号。
import requests
url = 'https://www.weblancer.net/jobs/'
r = requests.get(url)
print r.encoding
print r.text
我有类似的东西:
windows-1251
UnicodeEncodeError: 'ascii' codec can't encode characters in position 256-263: ordinal not in range(128)
这是Python 2.7的问题还是根本没有问题? 帮帮我
答案 0 :(得分:3)
来自docs:
请求将自动解码服务器中的内容。最 unicode charsets无缝解码。
当您提出请求时,请求会对此进行有根据的猜测 基于HTTP头的响应编码。
requests.get().encoding
告诉您用于将服务器的比特流转换为响应中的Unicode文本的编码。
在你的情况下它是正确的:响应中的标题表示字符集是windows-1251
您遇到的错误就在此之后。你正在使用的python试图将Unicode编码为ascii来打印它,然后失败。
您可以说打印r.text.encode(r.encoding)
...这与Padraic在评论中的建议结果相同 - 即r.content
。
注意:
requests.get().encoding
是一个lvar:你可以把它设置成你想要的,如果猜错的话。