Python网页乱码主因是响应编码与解码方式不一致,需手动指定response.encoding或用chardet检测后设置,也可直接对r.content调用decode()并处理异常,还可解析HTML meta标签获取charset声明。
Python 获取网页出现乱码,核心原因是网页编码(如 UTF-8、GBK、GB2312)与你读取时使用的解码方式不一致。解决的关键是**正确识别并指定响应内容的编码格式**,而不是盲目用默认编码或乱试。
requests 库的 response.text 会根据 response.encoding 自动解码。但 requests 有时会误判编码(比如把 GBK 网页识别成 ISO-8859-1),导致乱码。此时应手动覆盖:
response.content(原始字节)查看前几百字节,用文本编辑器或 chardet 探测真实编码response.encoding = 'GBK' 或 'UTF-8',再取 response.text
对于编码未知的老站或中文站点,chardet 是实用工具。注意它基于字节统计,对短文本可能不准,建议只检测前 100KB:
pip install chardet
绕过 requests 的自动解码逻辑,自己处理字节流,避免 encoding 属性被污染:
r.content 是原始 bytes,可安全传给 .decode()

errors='ignore' 跳过非法字符,'replace' 替换为 ,按需选择有些网页在 HTML 的 鎴