问题描述
当服务器的content-type
为'Content-Type:text/html'
时,requests.get()
返回错误编码数据.
但是,如果我们将内容类型显式设置为 'Content-Type:text/html;charset=utf-8'
,它返回正确编码的数据.
此外,当我们使用 urllib.urlopen()
时,它返回正确编码的数据.
有没有人注意到这一点?为什么 requests.get()
会这样?
来自 请求文档:
当您发出请求时,Requests 会根据 HTTP 标头对响应的编码进行有根据的猜测.访问r.text时使用Requests猜测的文本编码.您可以找出请求使用的编码,并使用 r.encoding 属性对其进行更改.
>>>r.编码'utf-8'>>>r.encoding = 'ISO-8859-1'
检查用于您的页面的编码请求,如果它不正确 - 尝试强制它成为您需要的编码请求.
关于 requests
和 urllib.urlopen
之间的区别 - 他们可能使用不同的方式来猜测编码.仅此而已.
When the content-type
of the server is 'Content-Type:text/html'
, requests.get()
returns improperly encoded data.
However, if we have the content type explicitly as 'Content-Type:text/html; charset=utf-8'
, it returns properly encoded data.
Also, when we use urllib.urlopen()
, it returns properly encoded data.
Has anyone noticed this before? Why does requests.get()
behave like this?
From requests documentation:
>>> r.encoding
'utf-8'
>>> r.encoding = 'ISO-8859-1'
Check the encoding requests used for your page, and if it's not the right one - try to force it to be the one you need.
Regarding the differences between requests
and urllib.urlopen
- they probably use different ways to guess the encoding. Thats all.
这篇关于python requests.get() 返回未正确解码的文本而不是 UTF-8?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!