如何在GitHub Actions中配置中文支持解决VS2022 C++中文乱码问题
解决VS2022编译C++项目在GitHub Actions中输出中文乱码问题
问题根源
GitHub Actions的Windows运行环境默认使用英文系统,控制台代码页为437(OEM-US),而本地中文系统代码页为936(GBK)。当程序输出中文时,编码不匹配导致乱码;即便使用Unicode字符串,printf默认依赖当前控制台代码页,仍会出现编码转换错误。
解决方案
1. 在GitHub Actions脚本中设置控制台代码页
在运行程序的步骤前添加代码页切换命令,强制控制台使用UTF-8或中文编码:
- 使用UTF-8编码:
- name: 运行程序 run: | chcp 65001 .\bin\your_program.exe
- 使用GBK中文编码:
- name: 运行程序 run: | chcp 936 .\bin\your_program.exe
2. 修改C++代码强制输出UTF-8
在程序初始化时设置控制台输出为UTF-8,并确保代码文件以UTF-8无BOM格式保存:
#include <windows.h> #include <stdio.h> int main() { // 将控制台输出编码设置为UTF-8 SetConsoleOutputCP(CP_UTF8); // 输出UTF-8编码的中文字符串 printf("你好,中文测试\n"); return 0; }
VS2022中设置文件编码:点击「文件」→「高级保存选项」,选择「UTF-8 无签名」。
3. 使用宽字符输出函数配合控制台模式
若需使用Unicode宽字符,需配置控制台支持虚拟终端处理:
#include <windows.h> #include <wchar.h> int main() { SetConsoleOutputCP(CP_UTF16); HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE); DWORD mode; GetConsoleMode(hConsole, &mode); // 启用虚拟终端处理,支持宽字符正确渲染 SetConsoleMode(hConsole, mode | ENABLE_VIRTUAL_TERMINAL_PROCESSING); wprintf(L"你好,中文测试\n"); return 0; }
额外提示
- 项目属性设置:在VS2022项目属性→「常规」→「字符集」,根据代码处理方式选择「使用多字节字符集」或「使用Unicode字符集」。
- GitHub Actions环境中,设置代码页后无需额外配置字体,默认控制台字体已支持中文字符渲染。
内容的提问来源于stack exchange,提问作者qyt
相关产品推荐
相关产品推荐

