网络请求中常见的两种响应乱码及解决方案

2024-08-08 13:29:10 浏览数 (2)

前言

  • 在进行网络请求时,响应内容出现乱码是一个常见问题。尤其是涉及中文字符时,更容易遇到编码问题。本文将介绍两种常见的响应乱码问题及其解决方案,并提供 Python 3.x 代码示例。

中文乱码

  • 中文乱码通常是由于响应内容的编码与实际使用的编码不匹配导致的。解决这个问题的方法是确保在处理响应内容时,使用正确的编码格式。

解决方案

  • 检查响应头中的编码格式,并使用相应的编码进行解码。
  • 如果响应头中没有指定编码,尝试使用 chardet 库自动检测编码。

示例代码

代码语言:Python复制
import requests
import chardet

# 发送请求
response = requests.get('https://example.com')

# 尝试从响应头中获取编码
encoding = response.encoding

# 如果没有指定编码,使用chardet检测编码
if not encoding:
    result = chardet.detect(response.content)
    encoding = result['encoding']

# 使用检测到的编码进行解码
content = response.content.decode(encoding)
print(content)

响应请求乱码

  • 某些服务器会使用压缩,比如 Brotli 压缩(br 编码)来减少响应体的大小。如果客户端没有正确处理这种编码,可能会导致响应内容出现乱码。

解决方案

  • 使用 requests 库的 accept-encoding 参数明确指定客户端接受的编码格式(去掉无法处理的编码 比如 br)
  • 手动解压 Brotli 编码的响应内容

示例代码

代码语言:Python复制
import requests
import brotli

# 发送请求,并明确指定不接受 Brotli 编码
headers = {
    'Accept-Encoding': 'gzip, deflate'
}
response = requests.get('https://example.com', headers=headers)

# 检查响应的编码格式
if 'br' in response.headers.get('Content-Encoding', ''):
    # 使用 Brotli 解压
    content = brotli.decompress(response.content).decode('utf-8')
else:
    # 使用默认编码
    content = response.text

print(content)

总结

  • 在处理网络请求时,遇到响应内容乱码是常见的问题。大多数都是由于各种编码问题导致,通过正确处理编码格式,可以有效解决中文乱码和压缩编码导致的乱码问题。

个人简介

0 人点赞