场景:Windows 下使用VSCode 编写C程序,输出中文乱码编译器:MinGW, 使用CMakeList.txt 脚本自动编译解决方案:在脚本中添加以下内容:set(CMAKE_EXPORT_COMPILE_COMMANDS ON)# 2. 在 project 之后根据编译器 ID 进行判断# CMAKE_CXX_COMPILER_ID 的值通常是: MSVC, GNU, Clang, AppleClangif(MSVC)# --- 针对 Visual Studio (MSVC) ---# /utf-8 既设置源码集也设置执行集完美支持中文add_compile_options(/utf-8)elseif(CMAKE_CXX_COMPILER_ID STREQUALGNUOR CMAKE_CXX_COMPILER_ID STREQUALClang)# --- 针对 MinGW / GCC / Clang ---add_compile_options(-finput-charsetUTF-8)add_compile_options(-fexec-charsetGBK)else()message(WARNINGUnknown compiler:${CMAKE_CXX_COMPILER_ID})endif() 为什么这么做-finput-charsetUTF-8告诉 GCC“我的.cpp文件是用 UTF-8 保存的请按 UTF-8 读取里面的中文。”-fexec-charsetGBK告诉 GCC“编译出来的.exe文件里字符串常量请转换成 GBK 编码。”原因Windows 的中文控制台cmd / PowerShell默认使用 GBK (CP936) 编码。如果 exe 里存的是 UTF-8控制台就会显示乱码。修改保存后点击 VS Code 上方的“构建”或重新运行 CMake.总结:Windows 下 GCC/MinGW 中文代码 CMake 导致的编码冲突核心原因代码里写了中文字符串创建成功GCC 编译器默认用 GBK 编码源码是 UTF-8字节不匹配 → 直接报非法字节序列