Python Requests 中文乱码处理与编码机制解析

宋时安
宋时安
发布时间:2026-10-11| 5人浏览过
原创

在使用 Python Requests 库进行网络请求时,开发者常遇到返回内容中文显示为乱码的情况。这通常源于 Requests 自动推测的编码与服务器实际编码不一致。本文解析 r.text 与 r.content 的工作机制,并提供通过 r.encoding 修正编码及手动转换字符串的具体方法。

Requests 响应机制与乱码成因

Requests 库在获取服务器响应时,会尝试根据 HTTP 头部信息推测内容的编码格式。若头部信息缺失或推测错误,Requests 默认使用 ISO-8859-1 编码进行解码。当服务器实际返回的是 UTF-8 或其他包含中文的编码格式时,这种不匹配的解码方式会导致 r.text 返回乱码字符串。

r.text 与 r.content 的区别

理解乱码问题的关键在于区分 r.text 和 r.content 的数据类型与用途:

  • r.text:返回 Unicode 类型的字符串。Requests 会根据推测的编码(通过 r.encoding 查看)将字节流解码为字符串。适用于直接获取文本内容。
  • r.content:返回 bytes 类型的原始字节数据。Requests 不进行任何解码操作。适用于获取图片、文件二进制数据或需要手动指定编码的场景。

解决方案:修正编码与手动转换

解决中文乱码主要有两种路径:通过 Requests 属性修正编码,或手动将字节转换为字符串。

方法一:通过 r.encoding 指定编码

这是最推荐的做法。在访问 r.text 之前,手动将 r.encoding 设置为服务器实际的编码格式(通常为 'utf-8')。Requests 随后会使用指定的编码重新解码内容。

import requests

response = requests.get('http://example.com')
# 手动指定编码为 utf-8
response.encoding = 'utf-8'
# 此时 r.text 将正确显示中文
print(response.text)

方法二:使用 r.content 手动解码

若需获取原始字节数据并手动控制解码过程,可使用 r.content。由于 r.content 返回的是 bytes 类型,需将其转换为 str。

以下是两种常见的转换方式:

  1. 使用 str() 构造函数:直接指定编码格式。
html_bytes = response.content
html_str = str(html_bytes, 'utf-8')
  1. 使用 bytes.decode() 方法:支持指定错误处理策略(如忽略无法解码的字符)。
html_str = html_bytes.decode('utf-8', 'ignore')

总结

处理 Python Requests 中文乱码的核心在于确认服务器实际编码。优先通过 response.encoding = 'utf-8' 修正编码属性,再访问 r.text;或在必要时使用 r.content 配合手动解码逻辑。明确 r.text(Unicode 字符串)与 r.content(Bytes 数据)的区别,能有效避免编码转换错误。

以上就是 Python Requests 中文乱码处理与编码机制解析的详细内容,更多关于 Python Requests 编码解码的资料请关注本站其它相关文章!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。