日常知识通
柔彩主题三 · 更轻盈的阅读体验

Python脚本编码问题解决:轻松应对中文乱码

发布时间:2025-12-24 13:40:52 阅读:153 次

Python脚本时,遇到中文显示乱码,文件读取报错,这种问题太常见了。尤其是处理配置文件、日志或爬虫抓取网页时,一碰到非ASCII字符就出问题,让人头疼。

为什么会出现编码问题?

Python 3 默认使用 UTF-8 编码,但有些文本文件是用 GBK、GB2312 或其他编码保存的,比如Windows记事本默认存的中文文本。脚本一读,编码对不上,自然就乱码了。另外,服务器环境、编辑器设置、甚至终端输出也会影响编码表现。

查看文件实际编码

别急着改代码,先确认文件到底是什么编码。可以用 Python 的 chardet 库探测:

import chardet

with open('data.txt', 'rb') as f:
    raw_data = f.read()
    result = chardet.detect(raw_data)
    print(result)

输出可能是 {'encoding': 'GBK', 'confidence': 0.99},这就告诉你该用什么编码打开。

正确打开中文文件

知道编码后,打开文件时显式指定 encoding 参数:

with open('data.txt', encoding='utf-8') as f:
    content = f.read()

如果是 GBK 编码的文件,改成 encoding='gbk' 就行。这样读出来的中文就不会变成“涓枃”或者抛出 UnicodeDecodeError 了。

脚本中包含中文字符串

老版本 Python 2 需要在文件开头加声明:

# -*- coding: utf-8 -*-

Python 3 已经默认支持 UTF-8,一般不用加。但如果在某些旧环境运行,加上更保险。

处理网络请求中的编码

用 requests 爬网页时,有时 resp.text 还是乱码。可以手动指定编码:

import requests

resp = requests.get('https://example.com')
resp.encoding = 'utf-8'  # 或 gbk,视网页而定
print(resp.text)

也可以直接用 resp.content.decode('gbk') 来解码原始字节。

避免路径中的中文问题

脚本处理带中文的文件路径,在 Windows 上容易出错。确保路径字符串是 Unicode,Python 3 通常没问题。如果传给 subprocess 调用外部命令,注意命令行环境是否支持 UTF-8。

统一项目编码规范

最省心的办法是整个项目都用 UTF-8。编辑器保存文件时选 UTF-8 无 BOM 格式,配置文件、日志输出、数据库连接都统一设定。团队协作时尤其重要,避免有人用记事本乱改编码。

编码问题看着小,出一次就够折腾半天。提前设好 encoding,读文件前查一下真实编码,大部分坑都能绕开。