核心是终端代码页(936)与UTF-8输出不匹配;需在settings.json中配置terminal.integrated.profiles.windows,为PowerShell添加args:["-NoExit","-Command","chcp 65001 > $null"],并重启VSCode生效。

Windows 下 VSCode 运行 C 程序终端中文乱码,核心是 CMD/PowerShell 的代码页(936)和 UTF-8 源文件输出不匹配;不是字体问题、不是插件问题、也不是 VSCode 编辑器本身编码设错了——而是终端进程启动时根本没切到 UTF-8。
为什么 printf("你好") 输出 □ 或 ?,但 echo 你好 正常?
说明终端渲染层能显示中文,只是输入流被错误解码。C 程序以 UTF-8 字节写入 stdout,而 CMD 默认用 GBK(cp936)解析这些字节,自然错乱。验证方式:chcp 命令输出若为 活动代码页: 936,就是它。
- VSCode 设置里的
files.encoding只影响编辑器读写源文件,不影响运行时输出编码 -
terminal.integrated.encoding字段已弃用,设了无效 - 仅改
chcp 65001临时生效,关掉终端就回退——必须固化到 shell 启动流程
必须在 settings.json 配置 terminal.integrated.profiles.windows
VSCode 不会自动给 PowerShell/CMD 加 chcp 65001,得手动声明启动行为。PowerShell 用户填这个:
"terminal.integrated.profiles.windows": {
"PowerShell": {
"source": "PowerShell",
"args": ["-NoExit", "-Command", "chcp 65001 > $null"]
}
}
-
-NoExit必须加,否则终端执行完chcp就退出 -
> $null是为了隐藏Active code page: 65001提示行,保持干净 - CMD 用户对应 profile 名是
Command Prompt,args改成["/k", "chcp 65001 > nul"] - 改完必须完全重启 VSCode,只关终端 tab 不行——旧进程环境已锁定
code-runner 执行 C 时仍乱码?补 chcp 65001 && 到命令前
Code Runner 插件默认直接调 gcc + 运行,绕过了你配的 terminal profile。需手动干预执行链:
立即学习“C语言免费学习笔记(深入)”;
"code-runner.executorMap": {
"c": "chcp 65001 && cd $dir && gcc $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt"
}
- 注意是
&&(逻辑与),不是;或换行——保证前一条失败时后边不执行 - 如果用了 MinGW-w64,确保其
gcc支持 UTF-8 输出(较新版本都支持) - 若用 WSL2 作终端,不用管
chcp,但要确认 WSL 里locale是zh_CN.UTF-8
真正容易被忽略的是:系统级 UTF-8 支持未开启时,某些 Windows API 调用(比如 GetConsoleOutputCP())仍可能返回 936,导致部分 C 运行时库(如 MSVCRT)内部缓冲区按 GBK 处理 stdout。此时光靠 chcp 不够,得进「控制面板 → 区域 → 管理 → 更改系统区域设置」勾选「Beta 版:使用 Unicode UTF-8 提供全球语言支持」并重启——这是唯一能让所有 Win32 控制台子系统默认走 UTF-8 的办法。


















