📅  最后修改于: 2023-12-03 15:34:42.964000             🧑  作者: Mango
在进行Python中的网络请求时,我们通常会使用 requests 库来完成请求,获得请求后会得到一个 response
对象。在 response
对象中,有一个 encoding
属性可以设置响应内容的编码格式。
response.encoding
是一个可读写的字符串属性,用于指定响应内容的字符编码。在使用 response.text
获得响应内容时,如果没有设置 response.encoding
,那么 requests 库会根据 HTTP 头部中的 charset 或者 HTML 中的 <meta>
标签来推测响应内容的编码格式。
如果响应内容的字符编码没有被正确地推测出来,那么就可能会导致乱码等问题。
对于大部分响应,requests 库能够正确地推测出响应内容的字符编码,因此我们在代码中通常不需要显式地设置 response.encoding
。
但是,在少数情况下,响应内容的编码可能会被错误地推测出来。这时,我们可以通过手动设置 response.encoding
来指定正确的字符编码。
import requests
url = 'http://example.com'
response = requests.get(url)
response.encoding = 'utf-8' # 通过手动设置来指定正确的编码
print(response.text)
有一种常见的情况是,响应内容以无 BOM 的 UTF-8 编码格式存储。在这种情况下,如果不将 response.encoding
显式地设置为 'utf-8-sig'
,那么返回的内容可能会包含BOM头,从而导致解析错误。
import requests
url = 'http://example.com'
response = requests.get(url)
response.encoding = 'utf-8-sig' # 通过设置正确的 BOM 头来解析返回的内容
print(response.text)
response.encoding
是用来指定响应内容的字符编码<meta>
标签来推测响应内容的编码格式response.encoding
可以解决一些问题response.encoding
设置为 'utf-8-sig'
来正确解析