encodingviewer插件仅能查看文件编码,无法批量转换;真正可行的批量转码方案是python script插件调用notepad.runmenucommand()执行菜单命令,并需将notepad++设为英文界面以确保兼容性。

EncodingViewer 插件本身**不能批量转换编码**,它只负责“查看”当前文件的编码类型,不提供“转换”或“保存”功能。想靠它一键转码是行不通的——这是最常被误解的一点。
为什么 EncodingViewer 不适合批量转码
EncodingViewer 的核心能力是检测并显示当前标签页的编码(比如识别出文件实际是 GBK,但 Notepad++ 错误地以 ANSI 打开),它没有 runMenuCommand 或 notepad.save() 这类操作接口。你看到的“编码信息”只是只读快照。
常见错误现象:
- 装完
EncodingViewer后,在插件菜单里找不到“批量转换”选项 - 右键菜单只有“Show encoding info”,点开后只能看,不能改
- 试图用它配合 Python Script 脚本调用,结果报错
AttributeError: 'module' object has no attribute 'convert'
真正能批量转码的路径:Python Script + notepad.runMenuCommand()
Notepad++ 原生支持的编码转换动作(如“转为 UTF-8”)必须通过菜单命令触发,而只有 Python Script 插件能模拟这个操作。关键不是“看编码”,而是“打开 → 菜单执行 → 保存 → 关闭”。
实操要点:
- 菜单名必须和当前 Notepad++ 界面语言完全一致:
notepad.runMenuCommand("Encoding", "Convert to UTF-8")(英文界面);中文界面则要写"编码(N)", "转为 UTF-8 编码" - 必须先
notepad.open(file_path),再执行转换,否则命令无效 -
notepad.save()会覆盖原文件;若想保留原文件,得用notepad.saveAs(new_path),但会弹确认框,无法跳过 - 脚本中需显式导入:
from Npp import notepad,否则notepad对象不可用
容易被忽略的兼容性陷阱
Notepad++ 的编码菜单项在不同版本、不同语言设置下名称差异很大,稍有不匹配就会静默失败(脚本不报错,但文件没变)。
验证方式:
- 手动打开一个文件 → 查看菜单栏“Encoding”子项的**确切文字**(注意括号、空格、标点)
- 用
notepad.getMenuItems()在 Python Interactive Console 中调试,确认菜单结构 - 脚本开头加
console.show()和console.write("opening: " + file_path + "\n"),实时观察执行流 - 路径含中文或空格时,
os.path.join()比字符串拼接更安全
别跳过这一步:Notepad++ 必须设为英文界面
中文版 Notepad++ 的菜单命令名在 Python Script 中存在编码和空格识别问题,尤其当系统 locale 是中文时,runMenuCommand() 极易失效。这不是 bug,是插件底层调用 Windows API 时对本地化字符串处理不一致导致的。
正确做法:
- 设置 → 首选项 → 常规 → 本地化 → 选
English - 重启 Notepad++
- 之后所有脚本统一用英文菜单名,例如:
"Encoding", "Convert to UTF-8"
这个设置影响整个工作流的稳定性,跳过它,90% 的批量脚本会在第 3 个文件就停住不动。











