📜  response.encoding – Python请求(1)

📅  最后修改于: 2023-12-03 15:34:42.964000             🧑  作者: Mango

Python请求中的response.encoding

在进行Python中的网络请求时,我们通常会使用 requests 库来完成请求,获得请求后会得到一个 response 对象。在 response 对象中,有一个 encoding 属性可以设置响应内容的编码格式。

encoding的含义

response.encoding 是一个可读写的字符串属性,用于指定响应内容的字符编码。在使用 response.text 获得响应内容时,如果没有设置 response.encoding,那么 requests 库会根据 HTTP 头部中的 charset 或者 HTML 中的 <meta> 标签来推测响应内容的编码格式。

如果响应内容的字符编码没有被正确地推测出来,那么就可能会导致乱码等问题。

如何设置encoding

对于大部分响应,requests 库能够正确地推测出响应内容的字符编码,因此我们在代码中通常不需要显式地设置 response.encoding

但是,在少数情况下,响应内容的编码可能会被错误地推测出来。这时,我们可以通过手动设置 response.encoding 来指定正确的字符编码。

import requests

url = 'http://example.com'

response = requests.get(url)
response.encoding = 'utf-8'  # 通过手动设置来指定正确的编码

print(response.text)
BOM

有一种常见的情况是,响应内容以无 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 是用来指定响应内容的字符编码
  • requests 库会根据 HTTP 头部中的 charset 或者 HTML 中的 <meta> 标签来推测响应内容的编码格式
  • 如果响应内容的字符编码没有被正确地推测出来,那么设置 response.encoding 可以解决一些问题
  • 对于无 BOM 头的 UTF-8 编码的响应内容,需要将 response.encoding 设置为 'utf-8-sig' 来正确解析