Notepad++唯一可行的批量编码转换方案是Python Script插件调用notepad.runMenuCommand()或notepad.menuCommand()模拟人工操作:逐个打开→菜单转换→保存→关闭;必须英文界面、正确拼接路径、显式调用save(),否则静默失败或批量乱码。

Notepad++ 本身没有“批量转码并自动保存”的内置功能,所谓“设置”不是点几个选项就能生效,而是必须明确走哪条技术路径——选错就白忙活,还可能批量制造乱码文件。
Python Script 插件调用 notepad.runMenuCommand() 是唯一能真正在 Notepad++ 内完成批量编码转换的方案
这个方案本质是让 Notepad++ 模拟人工操作:逐个打开文件 → 点菜单执行转换 → 立即保存 → 关闭。它不改磁盘文件,只操作当前标签页的内存文本,所以必须配合 notepad.save() 才会落盘。
- 必须先安装 Python Script 插件(Notepad++ 8.9.7 兼容),且确保 Notepad++ 运行在英文界面,否则
notepad.runMenuCommand("Encoding", "Convert to UTF-8")中的字符串会因中文菜单名(如“编码(N)”“转为 UTF-8 编码”)不匹配而静默失败 - 脚本开头必须写
from Npp import notepad,否则notepad对象不可用 -
notepad.open(filepath)必须在runMenuCommand()前调用,否则命令对空标签页无效 -
notepad.save()直接覆盖原文件;若想保留原文件,得用notepad.saveAs(new_path),但会弹确认框,无法跳过 - 路径含中文或空格时,务必用
os.path.join(root, filename)拼接,别用root + "\" + filename
用 notepad.menuCommand(MENUCOMMAND.xxx) 替代菜单名字符串更稳定
比起依赖界面语言的字符串匹配,menuCommand() 调用预定义宏更可靠,尤其适合中英文混用或版本升级后菜单名微调的场景。
- 宏定义需通过插件 → Python Script → Context-Help 查看,常见值有:
MENUCOMMAND.FORMAT_CONV2_UTF_8(转 UTF-8)、MENUCOMMAND.FORMAT_CONV2_ANSI(转 ANSI/GBK) - 注意:
FORMAT_CONV2_UTF_8不等价于 “Convert to UTF-8”,它实际对应“转为 UTF-8(带 BOM)”,而无 BOM 版需查其他宏或退回runMenuCommand() - 该方式不依赖界面语言,但宏名与实际效果需实测验证,不同 Notepad++ 小版本间存在差异
- 仍需配合
notepad.open()和notepad.save(),缺一不可
别信“Converter”插件或“全部保存”能批量转码
所谓 Converter 插件(非 Python Script)和“右键→以UTF-8编码打开→全部保存”的组合,只是批量打开+批量保存,**不触发任何编码转换动作**。它保存的是当前标签页以错误编码解码后的内容,相当于把乱码再存一遍。
- 你看到右下角显示“UTF-8”,不代表内容被正确重编码——那只是 Notepad++ 把当前内存文本按 UTF-8 编码写入磁盘,而内存文本本身可能还是 GBK 解码出来的乱码
- “全部保存”只保存所有已修改标签页,但如果你没手动点过 Encoding → Convert to …,标签页状态根本没变,保存等于白存
- 未保存就切换标签页、或关闭前漏点保存,转码结果直接丢失,且无任何提示
- 拖入整个文件夹后右键“以UTF-8格式编码”,只是用 UTF-8 解码器尝试打开文件,不是转换;后续仍需手动转码+保存
真正麻烦的不是写几行脚本,而是 Notepad++ 对编码的处理全程无日志、不校验、不回滚。一个路径拼错、一个菜单名写差一个空格、一次忘记 save(),就可能让几十个文件同时变乱码——而且你很难立刻发现。


















