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

Notepad++ 运行 Lua 脚本时控制台显示中文乱码,根本不是脚本写错了,而是 Windows 控制台(默认 CP936/GBK)、Notepad++(默认 UTF-8)和 lua.exe 输出字节三者之间编码解读错位。只要其中一环没对齐,print("中文") 就会变成方块、问号或报错 unexpected symbol near '▒'。
chcp 65001 是最直接有效的临时解法
Windows 控制台默认用 GBK 解码输出,而你写的 Lua 文件是 UTF-8 编码,lua.exe 原样把 UTF-8 字节吐给 cmd,cmd 却当 GBK 解——必然乱码。强制让 cmd 切到 UTF-8 模式就能对上。
- 在 Notepad++ 的 Run 对话框(F5)中,输入:
chcp 65001 && lua "$(FULL_CURRENT_PATH)" - 如果想保留黑窗并防闪退,改用:
chcp 65001 && cmd /k lua "$(FULL_CURRENT_PATH)" & PAUSE -
chcp 65001 >nul可隐藏切换提示行,适合 NppExec 脚本里用 - 注意:
chcp命令只对当前 cmd 实例生效,关掉就重置,所以必须每次运行都带上
文件编码必须是 UTF-8 无 BOM
Notepad++ 右下角显示“UTF-8”不等于真 UTF-8;它可能误判为 UTF-8-BOM 或 ANSI。BOM(\xEF\xBB\xBF)会被 Lua 5.3+ 当作非法字符,直接报 unexpected symbol near '▒'。
- 打开 Lua 文件 → 菜单栏「编码」→ 点「UTF-8」(**不是**「UTF-8-BOM」)
- 立刻按
Ctrl+S保存,否则关闭后恢复原状 - 新建文件前,务必进「设置 → 首选项 → 新建文档/默认目录」→ 把「新建文档编码」设为「UTF-8」,并取消勾选「以UTF-8-BOM格式编码」
- 若已乱码且「UTF-8」选项无效,说明文件实际是 GBK 编码:先「以GBK格式编码」还原内容,再「转为UTF-8」保存
NppExec 插件比 F5 更可靠,但得配对用
F5 的 Run 功能太简陋,不支持参数、不捕获 stderr、不跳转错误行。NppExec 能解决这些,但乱码问题它不自动处理——它只是管道,不改编码链。
- 安装 NppExec(v1.0+,旧版不支持 UTF-8 输出)
- 执行脚本填:
chcp 65001 >nul && cd "$(CURRENT_DIRECTORY)" && lua "$(FILE_NAME)"$1$2$3 - 保存为「Run Lua」,进「Advanced Options → Add to Menu」,勾选「Follow console output with caret」
- 别信
io.stdout:setvbuf('no')——它只关缓冲,跟编码无关
真正卡住的从来不是菜单点哪,而是 lua.exe 是否在 PATH 里、lua -v 能否在 CMD 中返回版本号、Notepad++ 是否彻底重启过、路径引号有没有漏、文件是不是真 UTF-8 无 BOM——四者缺一,控制台中文就永远出不来。










