notepad++ 默认用系统 ansi(如中文 windows 的 gbk)打开文件,导致 utf-8 文件乱码;需通过语言关联强制指定 .txt 为 utf-8 编码,并关闭重开已打开标签页才能生效。

Notepad++ 默认用系统 ANSI(比如中文 Windows 是 GBK)读文件,不是 UTF-8 —— 所以你一打开别人发来的 UTF-8 文件就乱码,不是文件坏了,也不是 Notepad++ 有问题,是它根本没按正确方式“看”字节。
为什么勾了“以 UTF-8 格式打开所有文件”还是乱码
这个选项只是让 Notepad++ 尝试用 UTF-8 解析——但它会自动 fallback:如果文件带 BOM 或明显不符合 UTF-8 字节模式(比如纯 GBK 二进制流),它立刻退回用系统 ANSI 解,结果还是乱。更关键的是:
- 它对已通过语言关联设定的文件类型无效(比如你给
.txt强制设了GBK,那它永远优先用GBK) - 它不覆盖已打开的标签页,改完设置后,那些开着的
.txt还维持旧解析逻辑 - 它无法识别短文本、纯 ASCII 或混合编码的老文件,检测逻辑靠字节统计,不是 AI
怎么让 .txt 文件一打开就是 UTF-8(不是新建,是已存在文件)
仅改“新建默认编码”完全没用。.txt 是已有文件,Notepad++ 默认走系统 ANSI 解析,必须靠语言关联强制指定策略:
- 菜单栏点
设置 → 首选项 → 语言菜单/文档类型 - 右侧列表找到
Text file,双击它 - 勾选
Apply to all files with extension:,输入框填txt(不要加点,不要写*.txt) - 确保下方
Default encoding for this language是UTF-8 - 改完后,所有已打开的
.txt标签页必须手动关闭重开,新打开才生效
“以 UTF-8 格式编码”和“转为 UTF-8”的区别必须分清
这是最常踩坑的地方:以 UTF-8 格式编码 只是临时告诉 Notepad++ “请按 UTF-8 规则重新解释当前字节”,不改文件内容;转为 UTF-8 才是把当前内存里已解码的字符,按 UTF-8 编码规则重新生成字节并写回磁盘。
- 如果文件实际是
GBK,但被误标为ANSI(显示正常),你直接点转为 UTF-8,等于把一堆已解错的汉字再“固化”成UTF-8字节,关掉重开全是方块 - 正确顺序只能是:
编码 → 以 GBK 格式编码(看到中文正常)→编码 → 转为 UTF-8→ 立即Ctrl+S -
转为 UTF-8-BOM会在文件头加EF BB BF,某些脚本(如 Python shebang 行)或 Node.js 会报错,日常推荐用无 BOM 版本
真正起效的组合设置(别漏任何一项)
单设某一项容易失效,必须配齐:
-
设置 → 首选项 → 新建文档/默认目录:新建文档默认编码选UTF-8,且必须勾选以UTF-8 无 BOM 格式保存新文档(不勾等于白设) -
设置 → 首选项 → 新建/打开:勾选自动检测编码(当文件无 BOM 时)和以UTF-8 为默认编码,然后重启 Notepad++ -
设置 → 首选项 → 语言菜单/文档类型:给Text file关联txt扩展名,并设默认编码为UTF-8 - 改完所有设置后,所有已打开的
.txt标签页必须手动关闭重开——这点最容易被忽略,也是为什么“明明设了却没用”的主因











