跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像AI 生图工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
C++算法

C++中文字符乱码问题解决方案

C++中文乱码主要由源文件、读写及控制台编码不一致导致。解决方案包括将文件另存为ANSI编码、使用代码设置控制台UTF-8编码、或编写函数进行字符集转换。推荐优先检查文件编码一致性。

Elasticer发布于 2026/3/29更新于 2026/7/947 浏览

问题背景

最近在修改课程设计时,遇到了C++中文字符乱码问题(如Ż)。这种问题主要源于字符编码不一致、编译器处理差异及终端支持不足。本文将深入探讨问题根源并提供多种解决方案。

乱码原因

编码不一致性问题

  • 源文件编码:源代码以UTF-8保存,但编译器默认使用ANSI(即GBK)编码解析
  • 文件读写编码:文件写入使用UTF-8,读取时却使用ANSI编码
  • 控制台编码:Windows命令提示符默认GBK编码,与程序输出编码不一致

可以通过cmd来查看电脑的输出格式:Win+R cmd

文章配图

输入:CHCP

文章配图

936表示电脑默认是GBK格式

解决方案

方案1:修改读取文件的编码格式(最为推荐)

用记事本打开需要读取的文件:

文章配图

将文档另存为(注意不要修改文件命名和后缀),选择编码格式为ANSI

文章配图

然后重新打开程序测试就可以了,如下为修改前后对比图:

修改前

文章配图

修改后

文章配图

方案2:统一工程所有环节的编码(推荐UTF-8)

// 设置控制台为UTF-8编码(Windows)
#ifdef _WIN32
#include <windows.h>
#endif
void SetConsoleUTF8() {
#ifdef _WIN32
SetConsoleOutputCP(CP_UTF8); // 设置输出编码
SetConsoleCP(CP_UTF8); // 设置输入编码
#endif
}
// 编译器选项配置(CMake示例)
add_compile_options("$<$<CXX_COMPILER_ID:MSVC>:/utf-8>")
add_compile_options("$<$<NOT:$<CXX_COMPILER_ID:MSVC>>:-fexec-charset=UTF-8>")

方案3:转换字符编码

#include <string>
#include <locale>
#include <codecvt>

// UTF-8转本地编码(Windows为GBK)
std::string UTF8ToANSI(const std::string& utf8) {
#ifdef _WIN32
int len = MultiByteToWideChar(CP_UTF8, 0, utf8.c_str(), -1, nullptr, 0);
wchar_t* wstr = new wchar_t[len];
MultiByteToWideChar(CP_UTF8, 0, utf8.c_str(), -1, wstr, len);
len = WideCharToMultiByte(CP_ACP, 0, wstr, -1, nullptr, 0, nullptr, nullptr);
char* str = new char[len];
WideCharToMultiByte(CP_ACP, 0, wstr, -1, str, len, nullptr, nullptr);
std::string result(str);
delete[] wstr;
delete[] str;
return result;
#else
return utf8; // Linux/Unix默认UTF-8
#endif
}

// 使用示例
std::cout << UTF8ToANSI("你好,世界!") << std::endl;

目录

  1. 问题背景
  2. 乱码原因
  3. 编码不一致性问题
  4. 解决方案
  5. 方案1:修改读取文件的编码格式(最为推荐)
  6. 方案2:统一工程所有环节的编码(推荐UTF-8)
  7. 方案3:转换字符编码
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • Linux 进程控制:自主 Shell 命令行解释器实现
  • 大语言模型学习指南:从基础原理到实战应用
  • AI 创作者崛起:掌握核心工具与 AMA 互动成长
  • Qwen3-VL 果园采摘机器人:果实定位与可采摘性判断
  • 简单的解压缩算法 (多语言实现)
  • OpenCode 开源 AI 编程助手使用指南
  • Ubuntu 服务器安装 lrzsz 工具实现文件传输
  • C++ 位图与布隆过滤器:原理与实现
  • 无人机发展简史:从古代传说到现代探索(一)
  • WebPlotDigitizer 智能图表数据提取工具与科研应用指南
  • Ascend C 算子开发指南:从语法基础到算子实操
  • 基于 Higress 网关将 REST API 转换为 MCP Server 工具
  • Mac 安装 OpenClaw 并配置飞书机器人
  • 数据结构指南:堆
  • OpenClaw 主流厂商产品对比:2026 AI 智能体平台横评
  • AnythingLLM+DeepSeek R1 本地知识库数据分析实战
  • 大模型核心技术面试题汇总与解析
  • Raphael AI:基于 Flux 模型的免费 AI 图像生成工具
  • 专科生必看!10个降AIGC工具推荐,高效避坑指南
  • 前端开发必备的 3 个 AI 技能:UI 设计、工程实践与硬件优化

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online