You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 10:46:02