一招解决 Windows C/C++ 控制台中文乱码:SetConsoleOutputCP (CP_UTF8)

在 Windows 下开发 C/C++ 程序时,控制台输出中文大概率会遇到乱码问题(比如把 “内存占用” 显示成 “脳涔鎵撳紑”),网上五花八门的解决方案要么改系统设置、要么改编译器编码,都不够优雅。本文分享最简单、最通用、一劳永逸的解决方案:SetConsoleOutputCP(CP_UTF8)+SetConsoleCP(CP_UTF8)

一、问题根源:编码不匹配

Windows 控制台的默认编码是GBK/GB2312(代码页 936),而现代 C/C++ 编译器(VS/GCC/Clang)默认输出的是UTF-8 编码,两者编码格式不兼容,直接导致中文乱码。

举个典型的乱码例子:

cpp

运行

#include <iostream> using namespace std; int main() { cout << "=== CPU+内存+摄像头帧率测试 ===" << endl; cout << "请输入要占用的内存大小(MB):" << endl; return 0; }

运行后控制台显示:

plaintext

=== CPU+鍐呭瓨+鐩告満绗﹀彿娴侀噺娴嬭瘯 === 璇疯緭鍏ユ敮鎸佺殑鍐呭瓨澶у皬(MB)锛�

二、最佳解决方案:强制控制台 UTF-8 编码

只需在main函数开头添加两行代码,强制将控制台的输入 / 输出编码切换为 UTF-8,与程序编码对齐,乱码问题直接解决。

完整示例代码

cpp

运行

#include <iostream> #include <windows.h> // 必须包含Windows头文件 using namespace std; int main() { // 核心修复:设置控制台编码为UTF-8 SetConsoleOutputCP(CP_UTF8); // 控制台输出编码 SetConsoleCP(CP_UTF8); // 控制台输入编码(可选,输入中文时需要) // 现在中文正常显示 cout << "=== CPU+内存+摄像头帧率测试 ===" << endl; cout << "请输入要占用的内存大小(MB):" << endl; int mem_mb; cin >> mem_mb; cout << "你输入的内存大小是:" << mem_mb << " MB" << endl; return 0; }

运行后控制台显示:

plaintext

=== CPU+内存+摄像头帧率测试 === 请输入要占用的内存大小(MB): 2048 你输入的内存大小是:2048 MB

核心函数说明

函数作用备注
SetConsoleOutputCP(CP_UTF8)设置控制台输出编码为 UTF-8必加,解决cout/cerr输出乱码
SetConsoleCP(CP_UTF8)设置控制台输入编码为 UTF-8可选,仅当需要cin输入中文时添加
CP_UTF8UTF-8 编码的宏定义等价于 65001,直接写65001也可

三、进阶优化:让中文显示更美观(可选)

部分系统默认控制台字体对 UTF-8 支持不佳,可额外设置字体为 Consolas / 微软雅黑,提升中文显示效果:

cpp

运行

#include <iostream> #include <windows.h> using namespace std; int main() { // 核心编码设置 SetConsoleOutputCP(CP_UTF8); SetConsoleCP(CP_UTF8); // 进阶:设置控制台字体(可选) HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE); CONSOLE_FONT_INFOEX fontInfo = { sizeof(CONSOLE_FONT_INFOEX) }; GetCurrentConsoleFontEx(hConsole, FALSE, &fontInfo); wcscpy_s(fontInfo.FaceName, L"Consolas"); // 或 L"Microsoft YaHei"(微软雅黑) fontInfo.dwFontSize.X = 12; // 字体宽度 fontInfo.dwFontSize.Y = 24; // 字体高度 SetCurrentConsoleFontEx(hConsole, FALSE, &fontInfo); // 测试中文 cout << "=== CPU+内存+摄像头帧率测试 ===" << endl; return 0; }

四、避坑点说明

  1. 头文件必须包含:使用SetConsoleOutputCP需要包含<windows.h>,否则编译报错;
  2. 仅适用于 Windows:该函数是 Windows API,跨平台程序需加条件编译:

    cpp

    运行

    #ifdef _WIN32 SetConsoleOutputCP(CP_UTF8); SetConsoleCP(CP_UTF8); #endif
  3. OpenCV 画面中文仍乱码SetConsoleOutputCP仅解决控制台乱码,OpenCV 的putText不支持中文,画面中文需用 GDI 绘制(本文聚焦控制台,可参考文末拓展);
  4. VS 编码设置(可选):若仍乱码,将代码文件编码改为「UTF-8 with BOM」:
    • VS 右键代码文件 → 高级保存选项 → 编码选择「Unicode (UTF-8 带签名) - 代码页 65001」。

五、对比其他方案(为什么这是最优解)

解决方案优点缺点
手动执行chcp 65001简单每次运行程序都要执行,不适合发布程序
改系统区域设置全局生效影响系统其他程序,兼容性差
使用wcout/wstring支持宽字符代码冗余,需修改所有输出逻辑
SetConsoleOutputCP(CP_UTF8)一行解决、永久生效、不影响其他程序仅适用于 Windows(可加条件编译)

总结

解决 Windows C/C++ 控制台中文乱码的最优解是:

  1. 核心:SetConsoleOutputCP(CP_UTF8) + SetConsoleCP(CP_UTF8)
  2. 进阶:可选设置控制台字体提升显示效果;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1197020.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

智能游戏翻译终极指南:零基础实现自动化本地化方案

智能游戏翻译终极指南&#xff1a;零基础实现自动化本地化方案 【免费下载链接】GalTransl 支持GPT-3.5/GPT-4/Newbing/Sakura等大语言模型的Galgame自动化翻译解决方案 Automated translation solution for visual novels supporting GPT-3.5/GPT-4/Newbing/Sakura 项目地址…

智能配置助手:重新定义黑苹果EFI自动化配置

智能配置助手&#xff1a;重新定义黑苹果EFI自动化配置 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 在传统黑苹果配置过程中&#xff0c;技术复杂度…

Z-Image-Turbo + 法律AI:合同可视化新思路

Z-Image-Turbo 法律AI&#xff1a;合同可视化新思路 1. 引言&#xff1a;当法律文书遇上视觉表达 你有没有这样的经历&#xff1f;翻着几十页的合同条款&#xff0c;眼睛越看越累&#xff0c;关键信息却像藏在迷宫里&#xff0c;怎么都抓不住重点。尤其是非法律背景的业务人…

惊艳!UI-TARS-desktop打造的智能自动化办公案例展示

惊艳&#xff01;UI-TARS-desktop打造的智能自动化办公案例展示 1. UI-TARS-desktop&#xff1a;让AI真正“看懂”你的电脑 你有没有想过&#xff0c;有一天只需要动动嘴&#xff0c;就能让AI帮你完成一整套复杂的办公操作&#xff1f;比如&#xff1a;“打开Excel&#xff0…

亲测Z-Image-Turbo_UI界面,本地访问7860端口快速画图

亲测Z-Image-Turbo_UI界面&#xff0c;本地访问7860端口快速画图 你有没有遇到过这样的情况&#xff1a;好不容易找到一个看起来很厉害的AI生图模型&#xff0c;结果部署起来一堆依赖、配置复杂&#xff0c;还要写代码调接口&#xff0c;最后卡在环境问题上动弹不得&#xff1…

网页媒体资源嗅探技术实战指南:5大核心功能深度解析

网页媒体资源嗅探技术实战指南&#xff1a;5大核心功能深度解析 【免费下载链接】cat-catch 猫抓 chrome资源嗅探扩展 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 在当今数字化内容爆炸的时代&#xff0c;如何高效提取和管理网页中的多媒体资源已成为…

Induction_Motor_VF_Control:基于MATLAB/Simulink的利用...

Induction_Motor_VF_Control&#xff1a;基于MATLAB/Simulink的利用V/F控制的感应电机调速仿真模型。 仿真条件&#xff1a;MATLAB/Simulink R2015b 今天咱们来聊聊怎么用Simulink搞一个V/F控制的感应电机调速模型。这个仿真最大的特点就是简单粗暴但有效——毕竟工业现场里V/…

自动驾驶视觉感知实战:用PETRV2快速搭建BEV检测系统

自动驾驶视觉感知实战&#xff1a;用PETRV2快速搭建BEV检测系统 1. 引言 在自动驾驶的感知系统中&#xff0c;如何从多视角摄像头数据中构建一个统一、准确且可扩展的空间表达&#xff0c;是实现高阶智能驾驶的关键。近年来&#xff0c;鸟瞰图&#xff08;Birds Eye View, BE…

中文语音合成不再难|Voice Sculptor镜像让音色设计更简单

中文语音合成不再难&#xff5c;Voice Sculptor镜像让音色设计更简单 1. 让中文语音合成变得像“捏声音”一样直观 你有没有遇到过这样的情况&#xff1a;想为一段视频配上温柔的女声&#xff0c;却发现系统只能提供千篇一律的机械朗读&#xff1f;或者需要一个充满江湖气的评…

本地运行更安全!科哥镜像保障图片数据不出内网

本地运行更安全&#xff01;科哥镜像保障图片数据不出内网 1. 引言&#xff1a;为什么本地抠图正在成为新趋势&#xff1f; 你有没有这样的经历&#xff1a;为了给产品图换背景&#xff0c;把一堆高清原图上传到某个在线抠图网站&#xff0c;心里却隐隐不安——这些包含品牌标…

OpCore Simplify完整指南:5步为你的电脑找到完美macOS版本

OpCore Simplify完整指南&#xff1a;5步为你的电脑找到完美macOS版本 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 还在为选择哪个macOS版本而纠结…

结果自动保存在哪?UNet输出目录路径详解

结果自动保存在哪&#xff1f;UNet输出目录路径详解 1. 引言&#xff1a;你是不是也遇到过这个问题&#xff1f; 用完人脸融合工具&#xff0c;点了“开始融合”&#xff0c;结果图确实出来了&#xff0c;显示也正常——但当你想回头找这张图的时候&#xff0c;却发现不知道它…

OpCore-Simplify:终极智能配置工具让黑苹果部署变得简单

OpCore-Simplify&#xff1a;终极智能配置工具让黑苹果部署变得简单 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify OpCore-Simplify是一款革命性的智…

OpCore Simplify黑苹果配置神器:从零开始的轻松搭建之旅

OpCore Simplify黑苹果配置神器&#xff1a;从零开始的轻松搭建之旅 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 还在为复杂的黑苹果配置而头疼吗&…

OpCore Simplify:黑苹果EFI一键生成的终极完全指南

OpCore Simplify&#xff1a;黑苹果EFI一键生成的终极完全指南 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 还在为复杂的OpenCore配置而烦恼吗&…

OpCore Simplify智能配置指南:零基础自动化打造黑苹果系统

OpCore Simplify智能配置指南&#xff1a;零基础自动化打造黑苹果系统 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 还在为复杂的OpenCore配置头疼吗…

DeepSeek-R1-Distill-Qwen-1.5B降本部署案例:GPU费用节省40%实操

DeepSeek-R1-Distill-Qwen-1.5B降本部署案例&#xff1a;GPU费用节省40%实操 你是不是也遇到过这样的问题&#xff1a;想用大模型做推理服务&#xff0c;但一上生产环境&#xff0c;GPU成本就压得喘不过气&#xff1f;尤其是7B、13B这种大参数模型&#xff0c;显存占用高、响应…

OpCore Simplify:5大核心功能打造零门槛黑苹果配置体验

OpCore Simplify&#xff1a;5大核心功能打造零门槛黑苹果配置体验 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 还在为繁琐的OpenCore配置流程而烦…

OpCore Simplify实战:从硬件兼容性困惑到完美Hackintosh配置的破局之道

OpCore Simplify实战&#xff1a;从硬件兼容性困惑到完美Hackintosh配置的破局之道 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify "折腾了三天三…

YOLOv10+NVIDIA Jetson:嵌入式部署全流程

YOLOv10NVIDIA Jetson&#xff1a;嵌入式部署全流程 在边缘计算场景中&#xff0c;实时目标检测一直是工业质检、智能安防、无人设备等领域的核心需求。然而&#xff0c;传统YOLO系列模型依赖非极大值抑制&#xff08;NMS&#xff09;后处理&#xff0c;在低功耗设备上难以实现…