vscode系统提示乱码的根本原因是windows系统级utf-8支持未启用,而非文件编码或插件问题;需启用“beta版:使用unicode utf-8提供全球语言支持”并重启电脑,同时确保locale.json设为"zh-cn"且完全退出vscode重开。

VSCode系统提示信息(比如右下角弹出的“文件已保存”“扩展已启用”“正在格式化”这类通知)变成中文乱码,基本可以确定是终端或系统级编码与 VSCode 界面语言不匹配导致的,不是文件编码问题,也不是插件翻译问题——它压根没走到文件读写环节。
为什么系统提示会乱码:不是文件,是 Windows 控制台底层编码
VSCode 的系统提示(notification)本身由 Electron 渲染,文字来源是 VSCode 内置的 locale 包,只要装了 Chinese (Simplified) Language Pack 并设为 zh-cn,这部分就不会乱。但如果你看到的是类似“??????”或“文件没有ä¿å˜”这种,说明这些提示文字被某个中间层用错误编码重新解释过,最常见于 Windows 下集成终端(PowerShell/CMD)捕获或转发了 GUI 层的通知消息——尤其是你启用了某些调试器、任务运行器或自定义脚本后,它们可能把 stdout/stderr 误当成通知通道来用。
更隐蔽的情况是:你改过 terminal.integrated.profiles.windows,但只加了 [Console]::OutputEncoding=[System.Text.Encoding]::UTF8,却没同步设置 [Console]::InputEncoding,导致输入/输出编码不对称,某些回调触发时字符被二次错误解码。
检查 locale.json 是否生效:界面语言配置是否真正落地
系统提示依赖 VSCode 主进程的语言环境,这个由 locale.json 控制,不是靠插件开关决定的。
- 按
Ctrl + Shift + P输入Configure Display Language,回车 - 确认弹出的 JSON 文件里是
"locale": "zh-cn",不是"zh"或空值 - 改完必须**完全退出 VSCode(关闭所有窗口,包括托盘进程)再重开**,仅 reload window 不生效
- 如果用的是远程开发(SSH/WSL),
locale.json必须放在远程机器的~/.vscode-server/data/Machine/下对应路径,本地改无效
禁用可能劫持通知的扩展:特别是终端增强类插件
有些插件(比如 Terminal Tabs、PowerShell Pro Tools、旧版 Code Runner)会在终端启动时注入 hook,意外覆盖 Electron 的 notification handler。乱码常出现在执行完某条命令后弹出提示时,就是典型征兆。
- 临时禁用所有非必要扩展:打开扩展面板,点右上角“…”,选
Disable All Installed Extensions - 重启 VSCode,测试系统提示是否恢复正常
- 逐个启用,每次启用后执行一次带中文输出的任务(如运行
echo "测试"),观察提示是否再次乱码 - 重点排查名称含
terminal、shell、runner、output的扩展
Windows 系统区域设置必须开启 UTF-8 全局支持
即使 VSCode 自身语言和终端都设对了,Windows 底层 API(如 MessageBoxW 调用)在非 UTF-8 系统 locale 下仍可能把宽字符转成 GBK 字节流再传给 GUI 子系统,导致提示框文字被截断或错解。
- 打开控制面板 → 区域 → 管理 → 更改系统区域设置
- 勾选
Beta 版:使用 Unicode UTF-8 提供全球语言支持 - 点击确定后**必须重启电脑**,热加载无效
- 验证方式:打开 CMD,输入
chcp,应返回65001;再运行powercfg /list,中文字段应正常显示
这一步最容易被跳过,但它是 Windows 下彻底解决各类“非文件类”中文乱码的底层前提——系统提示、Git 提交日志弹窗、C++ 编译器警告框,全都绕不开它。











