Python文件编码必须统一使用UTF-8(无BOM),因其可避免跨平台乱码、SyntaxError及shebang识别异常;VS Code等编辑器需手动选“UTF-8”而非“UTF-8 with BOM”;Python 3无需coding声明;读写外部文件须显式指定encoding='utf-8'。
Python文件编码应统一使用UTF-8(无BOM),这是跨Windows、macOS、Linux系统稳定运行的关键前提。只要源码文件本身保存为UTF-8且明确声明,Python 3会默认按此解析,避免中文乱码、SyntaxError或读写异常。
Windows记事本默认保存为UTF-8 with BOM,而Python解释器(尤其3.8+)在读取带BOM的.py文件时,可能将U+FEFF误认为非法字符,引发SyntaxError: Non-UTF-8 code starting with '\xef'。Linux/macOS终端原生支持UTF-8,但BOM仍属冗余字节,可能干扰shebang(如#!/usr/bin/env python3)识别。无BOM的UTF-8是POSIX与Python官方文档明确推荐的标准。
Python 3.0+默认源码编码即为UTF-8,只要文件本身是UTF-8(无BOM),无需任何coding声明。加上该声明反而可能掩盖BOM问题(例如文件实际是UTF-8 with BOM,但声明了utf-8,解释器仍会报错)。仅当使用非UTF-8编码(极不推荐)时才需声明,日常开发中应完全省略。
源码编码统一只是基础,读写外部文件(如txt、csv、json)时必须显式指定encoding='utf-8':
立即学习“Python免费学习笔记(深入)”;
with open('data.txt', encoding='utf-8') as f:
with open('data.txt') as f:(依赖系统默认编码,Windows是gbk,Linux/macOS是UTF-8,必然跨平台失败)json.load()和json.dump()仍建议传入encoding='u
tf-8'参数(Python 3.9+已弃用该参数,直接用文本模式即可)快速确认.py文件是否合规:
file -i filename.py(Linux/macOS)查看编码类型xxd filename.py | head检查开头是否含ef bb bf(即BOM)python -m py_compile filename.py,若报SyntaxError且提示非UTF-8字符,大概率是BOM残留不复杂但容易忽略