Windows 下 使用VSCode 编写C++程序中文乱码问题

场景:Windows 下使用VSCode 编写C++程序,输出中文乱码

编译器:MinGW, 使用CMakeList.txt 脚本自动编译

解决方案:

在脚本中添加以下内容:

bash 复制代码
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

# 2. 在 project 之后,根据编译器 ID 进行判断
# CMAKE_CXX_COMPILER_ID 的值通常是: MSVC, GNU, Clang, AppleClang
if(MSVC)
    # --- 针对 Visual Studio (MSVC) ---
    # /utf-8 既设置源码集也设置执行集,完美支持中文
    add_compile_options(/utf-8)
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
    # --- 针对 MinGW / GCC / Clang ---
    add_compile_options(-finput-charset=UTF-8)
    add_compile_options(-fexec-charset=GBK)
else()
    message(WARNING "Unknown compiler: ${CMAKE_CXX_COMPILER_ID}")
endif()

🔍 为什么这么做?

  • -finput-charset=UTF-8 :告诉 GCC:"我的 .cpp 文件是用 UTF-8 保存的,请按 UTF-8 读取里面的中文。"
  • -fexec-charset=GBK :告诉 GCC:"编译出来的 .exe 文件里,字符串常量请转换成 GBK 编码。"
    • 原因:Windows 的中文控制台(cmd / PowerShell)默认使用 GBK (CP936) 编码。如果 exe 里存的是 UTF-8,控制台就会显示乱码。

修改保存后,点击 VS Code 上方的"构建"或重新运行 CMake.

总结:

Windows 下 GCC/MinGW + 中文代码 + CMake 导致的编码冲突,核心原因:

代码里写了中文字符串(创建成功)

GCC 编译器默认用 GBK 编码,源码是 UTF-8

字节不匹配 → 直接报非法字节序列

相关推荐
莫等闲-9 分钟前
leetcode42. 接雨水 leetcode84.柱状图中最大的矩形
数据结构·c++·算法·leetcode
爱吃生蚝的于勒9 分钟前
QT开发第二章——信号和槽
c语言·开发语言·c++·qt
techdashen18 分钟前
拆开任意 Electron 应用:从 Windows 安装包到 Discord 的私有更新协议
javascript·windows·electron
思麟呀22 分钟前
C++工业级日志项目(八)最终上层接口
开发语言·c++
六bring个六26 分钟前
c/c++面试踩坑笔记
c语言·数据结构·c++
石山代码27 分钟前
如何在 C++ 中实现多态?
开发语言·c++
阿方.91829 分钟前
C++ std::function 超全精讲 | 原理语法、适配对象、递归实现、回调场景、面试考点、易错坑点
开发语言·c++·bind·function
青山如墨雨如画36 分钟前
【Claude】Win11系统VSCode下的Claude使用方法
vscode·aigc·claude·vibe coding·authropic
不会C语言的男孩44 分钟前
C++ Primer Plus 第12章:类和动态内存分配
开发语言·c++
星卯教育tony1 小时前
CIE中国电子学会2026年3月c++ Python scratch 机器人真题试卷含参考答案
c++·python·scratch·电子学会