Python 3.x 字符串编码默认是 UTF-8,源码解析、str 内存表示、encode()/decode() 不传参时行为、open() 文本读写均强制锚定 UTF-8,不依赖系统 locale,该默认值写死在 CPython 源码中且不可全局修改。

Python 3.x 中字符串编码默认是 UTF-8,不是权宜之计,而是语言设计层面的强制约定——源码文件解析、str 内存表示、encode() 方法行为、open() 默认读写,全部锚定在 UTF-8 上。
Python 3 解析源文件时直接按 UTF-8 读取
解释器启动后第一件事就是解码源码文件,若文件头部没有 # coding=xxx 声明,就无条件用 UTF-8 尝试解码。一旦失败(比如文件实际是 GBK 保存但没声明),立刻抛出 SyntaxError: Non-UTF-8 code starting with ...。
- 不依赖系统 locale,也不读取
sys.getdefaultencoding()来决定怎么读源码 - 即使你在 Windows 上用记事本保存为 ANSI(即 GBK),只要没加
# coding=gbk,运行就报错 - PyCharm / VS Code 右下角显示的“UTF-8”不是提示,是解释器的真实预期
str.encode() 不传参数时等价于 .encode("utf-8")
这是最常被忽略的隐式行为:你写 "你好".encode(),背后调用的就是 "你好".encode("utf-8")。它不是“推荐用 UTF-8”,而是“不传参就只能是 UTF-8”。
图片提示词生成器?不止如此。 马甲系统 —— 把脑海中的画面,翻译成AI能理解的专业表达。 用得越多,它越懂你:首次需要多问几句确认方向,用久了几乎一说就懂。 用得越多,它越快:缓存机制让后续对话越来越省。 RAG进化:成功案例持续入库,越跑越聪明。 输入「新手指南」查看完整功能介绍
- 如果目标环境要求 GBK(如某些 Windows 旧工具),必须显式写
.encode("gbk") - 反过来,
bytes.decode()不传参数时也默认用 UTF-8,否则容易触发UnicodeDecodeError - 这个默认值写死在 CPython 源码里,无法通过配置全局修改
open() 读写文本文件默认走 UTF-8
Python 3 的 open() 在文本模式下(默认 mode="r")自动启用编码转换,且默认编码就是 UTF-8:
立即学习“Python免费学习笔记(深入)”;
-
open("data.txt").read()→ 文件内容按 UTF-8 解码成str -
open("out.txt", "w").write("中文")→str按 UTF-8 编码写入磁盘 - 跨平台一致:Linux/macOS 默认 UTF-8,Windows 默认 CP1252,但 Python 3 强制覆盖为 UTF-8
- 若要兼容旧系统文件,必须显式指定
encoding="gbk"或encoding="latin-1"
真正容易被绕过的点是:UTF-8 是默认,但不是万能。当遇到非 UTF-8 编码的遗留文件、二进制协议字段、或终端不支持 UTF-8 的环境(如某些嵌入式串口),硬套默认值只会让错误延迟到运行时才暴露——这时候得靠明确写死编码参数,而不是指望“默认能扛住”。

















