一、问题描述
在使用 Visual Studio Code 的 C/C++ Compile Run 插件调用 Windows 11 系统中的 cmd 终端运行 C++ 程序时,出现了中文输出显示为乱码的情况。
期望的程序输出效果如下:
而实际运行中呈现的效果为:
二、问题根源分析
当通过 CMD 终端执行 C++ 程序时,整个流程涉及三个关键阶段:源代码编写、编译器编译生成可执行文件、操作系统加载并运行该文件,最终结果在终端窗口中展示。在这三个环节中,若字符编码不统一,就容易引发乱码。
具体来看各阶段的编码情况:
- 源文件采用 UTF-8 编码保存;
- 编译器默认以 UTF-8 编码读取源码并进行编译;
- CMD 终端当前使用的字符集为 GBK。
问题的核心在于:程序运行后输出的文本是以 UTF-8 编码形式传递给终端的,但 CMD 终端却使用 GBK 编码去解析这些字节数据。虽然程序本身逻辑无误,但由于编码映射错误,导致中文无法正确显示。
有细心读者可能会提出疑问:那可执行文件内部的字符编码由谁决定?
答案是编译器。编译器在处理源码时,会根据其内部设定的编码规则(如 UTF-8)将字符转换为对应的二进制数据,并写入生成的可执行文件中。因此,只要源码和编译环境一致,这部分通常不会出错。
三、解决方案:修改 CMD 终端字符编码
为了使终端能正确识别并显示 UTF-8 编码的输出内容,需将 CMD 的默认代码页更改为 UTF-8(即代码页 65001)。以下是具体操作步骤:
1. 查看当前 CMD 字符编码
按下 Windows + R 键,输入 cmd 并回车打开命令提示符窗口,输入以下命令:
chcp
若当前编码为 GBK,则会返回数值 936。
2. 修改注册表设置
仍然使用 Windows + R 打开运行对话框,输入 regedit 并回车,进入注册表编辑器。
导航至以下路径:
HKEY_CURRENT_USER\Console\%SystemRoot%_System32_cmd.exe
查找名为 CodePage 的项,将其值修改为十进制的 65001(代表 UTF-8 编码)。
如果该路径或变量不存在,可手动创建对应项。
3. 验证修改结果
再次通过 Windows + R 打开新的 cmd 窗口,执行命令:
chcp
此时应显示输出 65001,表示 CMD 已切换至 UTF-8 编码模式。
4. 运行 C++ 程序验证效果
重新编译并运行原 C++ 程序,观察输出结果是否已正常显示中文。
四、结语
思,方晓千机之幽微;
践,乃明万象之本真。


雷达卡


京公网安备 11010802022788号







