根本原因是终端进程(PowerShell/cmd)未以UTF-8编码收发数据;需通过chcp 65001临时切换或在settings.json中配置args强制启动时执行[Console]::OutputEncoding=[System.Text.Encoding]::UTF8(PowerShell)或"/k chcp 65001 >nul"(cmd),并彻底重启VSCode生效。

VSCode终端输入中文字符显示乱码,根本不是编辑器“不支持中文”,而是终端进程(PowerShell / cmd)本身没用 UTF-8 编码收发数据——chcp 65001 没生效、或只临时生效、或被后续启动脚本覆盖了。
确认当前终端实际代码页是否为 UTF-8
在 VSCode 集成终端里直接运行:chcp。如果输出是 Active code page: 936(GBK),说明终端仍在用旧编码,所有中文输入/输出都会错位。这不是字体问题,也不是文件编码问题,是终端底层通信协议不匹配。
- 只靠修改
terminal.integrated.fontFamily或装中文字体,无法修复输入乱码 -
files.encoding设置对终端输入输出完全无影响 - 在终端里手动执行
chcp 65001可临时切换,但关闭终端后失效
PowerShell 终端必须强制设置 [Console]::OutputEncoding
PowerShell 默认不会继承系统 UTF-8 设置,即使开了「Beta 版:使用 Unicode UTF-8」,它仍可能用 GBK 处理输入缓冲区。必须在启动时就注入编码指令:
- 打开 VSCode 设置 → 搜索
terminal integrated profiles windows→ 点击「Edit in settings.json」 - 确保
PowerShell的args包含这一行:"[Console]::OutputEncoding=[System.Text.Encoding]::UTF8" - 注意:不能只写
[Console]::InputEncoding=...,PowerShell 输入乱码主因是OutputEncoding影响了回显逻辑 - 若用的是 PowerShell Core(pwsh.exe),需额外加
-NoProfile参数避免用户配置覆盖
cmd 终端需用 /k chcp 65001 启动且避免被批处理覆盖
cmd 更脆弱:它的代码页是会话级的,任何调用的批处理(比如 vcvarsall.bat、setenv.bat)都可能悄悄执行 chcp 936 把编码切回去。
- 在
settings.json中,Command Prompt的args必须是:["/k", "chcp 65001 >nul"](加>nul防止每次启动都刷一行提示) - 不要用
/c,否则终端启动后立即退出;/k才能保持会话并维持代码页 - 如果项目依赖 Visual Studio 工具链(如 MSVC),务必检查其环境初始化脚本是否重置代码页——这类脚本往往不可改,此时建议换用 PowerShell 终端
系统级 UTF-8 开启后仍要重启终端进程
勾选「Beta 版:使用 Unicode UTF-8 提供全球语言支持」并重启电脑,只是让新创建的 Windows 进程默认用 UTF-8。但 VSCode 启动后拉起的终端子进程,仍会继承 VSCode 主进程当时的环境变量和控制台属性。
- 改完系统设置后,必须彻底关闭 VSCode(右键托盘图标 → Exit),再重新打开
- 任务管理器里确认没有残留的
Code.exe或powershell.exe进程 - 即使系统已设 UTF-8,PowerShell 的
$PSDefaultParameterValues或profile.ps1仍可能覆盖[Console]::OutputEncoding,建议检查$PROFILE文件内容
最常被忽略的一点:输入法状态栏显示「中文」不代表终端能正确接收——Windows 输入法在 GBK 代码页下会自动把中文转成 GBK 字节提交给 cmd/powershell,而终端以为自己在 UTF-8 模式,结果把两个 GBK 字节当做一个 UTF-8 字符解析,必然双字节乱码。所以必须确保从进程启动那一刻起,编码就锁定为 65001。


















