cypc
回答者
回答于 2026-10-20
在Python脚本中正确设置文件编码以支持中文读写和输出,核心在于显式指定编码格式并保持环境一致。
直接回答
读取或写入包含中文的文件时,必须在open()函数中通过encoding参数指定编码(通常为utf-8)。对于控制台输出,需确保运行环境的默认编码支持中文。
具体步骤
- 源码文件编码声明:在Python脚本的第一行或第二行添加
# -*- coding: utf-8 -*-。这在Python 2中是必需的,在Python 3中虽默认使用UTF-8,但显式声明有助于编辑器识别。 - 文件读写操作:使用
open()函数时,始终传入encoding参数。# 写入中文 with open('test.txt', 'w', encoding='utf-8') as f: f.write('中文内容') # 读取中文 with open('test.txt', 'r', encoding='utf-8') as f: content = f.read() - 控制台输出:若使用
print()输出中文出现乱码,可检查并设置环境变量PYTHONIOENCODING=utf-8,强制标准输入输出使用UTF-8编码。
判断依据
- 如果未指定
encoding,Python会使用操作系统默认的编码(如Windows下常为gbk,Linux/macOS下常为utf-8),跨平台运行时极易引发UnicodeDecodeError或UnicodeEncodeError。 - 报错信息中包含
codec can't decode或codec can't encode即表明编码不匹配。
适用条件
- 适用于Python 3.x版本。Python 2的字符串处理机制不同,需额外区分
str与unicode类型。 - 文本文件(
.txt,.csv,.json等)需要指定编码;二进制文件(如图片、音频)使用'rb'或'wb'模式,无需且不能指定encoding。
常见误区
- 依赖系统默认编码:认为在自己电脑上运行正常即可,忽略了不同操作系统默认编码的差异,导致代码在其他机器上报错。
- 混淆文件保存编码与代码声明编码:源码文件本身必须以UTF-8格式保存在磁盘上,仅在代码里写声明而实际文件存为GBK依然会出错。
- 对二进制流使用encoding参数:在以
b模式打开文件时传入encoding参数会导致TypeError。