根本原因是windows终端默认用gbk(chcp 936)解码,而c程序按utf-8输出字节流,导致解码错位;需在code-runner.executormap中前置chcp 65001命令,确保终端以utf-8模式运行程序。

为什么 printf("中文") 在 VSCode 终端里显示乱码
不是代码写错了,也不是编译器有问题,而是 Windows 终端(cmd/PowerShell)默认用 chcp 936(GBK)解释输出字节,而你的 C 源文件是 UTF-8 编码,gcc 编译后按 UTF-8 字节流输出,终端却拿 GBK 去“翻译”,结果就是“锟斤拷”或方块。关键点在于:源码编码、编译器处理、终端解码这三者必须对齐。
改 code-runner.executorMap 最直接有效
如果你用 Code Runner 插件运行 C 程序,乱码问题基本就卡在这条配置上。它控制着“按下 F5 或 Ctrl+Alt+N 后,VSCode 实际执行哪条命令”。默认不带编码切换,终端始终维持 chcp 936。
- 打开 VSCode 设置 → 搜索
code-runner.executorMap→ 点击“在 settings.json 中编辑” - 找到
c对应的命令,比如:"c":"cd $dir && gcc $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt" - 在
cd前插入chcp 65001 &&,变成:"c":"chcp 65001 && cd $dir && gcc $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt" - 保存,重新运行程序——终端会先切到 UTF-8 模式再执行,中文就能正常显示
注意:chcp 65001 是临时生效,只影响本次命令行会话;不需要管理员权限,也不改系统注册表。
别碰 files.encoding 改成 GBK
有人建议把 VSCode 默认文件编码设成 GBK,看似“源头解决”,但实际埋坑:
- UTF-8 是现代 C/C++ 工程事实标准,GCC 从 5.0 起默认按 UTF-8 解析源码,强制用 GBK 可能导致某些宽字符宏(如
L"中文")解析异常 - 跨平台协作时,Linux/macOS 终端默认就是 UTF-8,你本地存 GBK,别人拉代码直接乱码
-
files.encoding只影响文件读写,不影响终端输出编码,改了也解决不了printf乱码
除非你在维护一个纯 Windows 下跑了几十年的老项目,否则不要动这个配置。
终端本身不支持 UTF-8?检查 terminal.integrated.env.windows
极少数情况下,即使加了 chcp 65001,终端仍不认 UTF-8,可能是环境变量干扰:
- 打开
settings.json,检查是否有类似"terminal.integrated.env.windows": { "PYTHONIOENCODING": "GBK" }的配置 - 如果有,删掉或改成
"PYTHONIOENCODING": "UTF-8"(虽然这是 Python 相关变量,但它会影响整个终端进程的编码继承) - 另外确认没设置
terminal.integrated.shellArgs.windows强制指定旧版 cmd 参数,比如带/c chcp 936的
真正难排查的点往往不在 VSCode 配置本身,而在这些隐藏的环境变量叠加效应——它们会覆盖 chcp 65001 的效果。
13万字C语言保姆级教程(深入):立即使用
在学习笔记中,你将探索c语言的核心概念和高级技巧!











