Notepad++运行Lua脚本中文乱码主因是Windows控制台(CP936)、Notepad++(UTF-8)与lua.exe输出字节三者编码不一致;需用chcp 65001切换控制台为UTF-8,并确保.lua文件为UTF-8无BOM编码且已保存。

Notepad++ 运行 Lua 脚本乱码,90% 是编码错位导致的——不是脚本写错了,而是 Windows 控制台、Notepad++ 和 lua.exe 三者之间对字节的解读不一致。
为什么 print("中文") 输出一堆方块或问号
Windows cmd 默认用 CP936(GBK)解码输出,而 Notepad++ 默认以 UTF-8 打开文件,lua.exe 本身不干预编码,只按字节原样往 stdout 写。结果就是:你写了 UTF-8 字节,cmd 当 GBK 解,必然乱码。
- 临时验证:在 Notepad++ 的 Run 对话框里填
chcp 65001 && lua "$(FULL_CURRENT_PATH)",执行后若中文正常,说明就是控制台编码问题 - 别信右下角状态栏显示的“UTF-8”——它只是 Notepad++ 的猜测,可能误判为 UTF-8-BOM 或 ANSI;先点「编码 → 以UTF-8格式编码」看是否立刻变正常
- 如果「以UTF-8格式编码」后仍乱码,说明文件实际是 GBK/GB18030 编码,得先「以GBK格式编码」还原,再「转为UTF-8」保存
lua: unexpected symbol near '▒' 这类报错怎么修
这是典型的 UTF-8 BOM 残留问题:Notepad++ 新建文件默认可能带 BOM,而 Lua 5.3+ 解析器会把 BOM(\xEF\xBB\xBF)当成非法字符,直接报第一行 near '▒'。
- 打开出错的 .lua 文件,菜单栏点「编码 → UTF-8」(注意不是「UTF-8-BOM」)
- 立刻按
Ctrl+S保存,否则关闭后恢复原状 - 确认右下角状态栏显示的是「UTF-8」且无 BOM 标识;若显示「UTF-8-BOM」,说明还没真正转过来
- 新建 Lua 文件时,务必在「设置 → 首选项 → 新建文档/默认目录」中把「新建文档编码」设为「UTF-8」,并取消勾选「以UTF-8-BOM格式编码」
用 NppExec 运行时中文输出还是乱码?
NppExec 插件自身支持 UTF-8 输出,但前提是 lua.exe 的 stdout 确实输出了 UTF-8 字节,且 Notepad++ 输出面板能正确识别。它不自动帮你切换控制台编码。
- 在 NppExec 脚本里加
chcp 65001 >nul &&开头,例如:chcp 65001 >nul && cd "$(CURRENT_DIRECTORY)" && lua "$(FILE_NAME)"$1 - 确保 NppExec 版本 ≥1.0(旧版不支持 UTF-8 输出),插件管理里检查更新
- 不要依赖
io.stdout:setvbuf('no')解决乱码——它只强制刷新缓冲区,和编码无关 - 如果用了相对路径读写中文名文件(如
io.open("配置.txt", "r")),还得确认系统区域设置是否启用「Beta: 使用 Unicode UTF-8 提供全球语言支持」,否则 Windows API 层面就无法正确处理中文路径
最常被忽略的一点:改完编码、PATH、NppExec 脚本后,必须彻底关闭 Notepad++ 再重开——新建窗口不继承新环境变量,也不重载插件编码配置。


















