wchar输出中文乱码问题,如何解决! [100个bug帮你学会C++]

彻底解决DEV-C++中文乱码:从编码原理到四种实战方案 字符编码是计算机处理文本信息的基础,它定义了字符与二进制数据之间的映射关系。在C/C++开发中,编码不一致是导致中文乱码的核心原因,涉及源代码文件、编译器处理和执行环境三个环节。理解ANSI/GBK与UTF-8等编码标准的差异及其应用场景,对于确保程序正确显示和存储多语言文本至关重要。本文聚焦于DEV-C++这一经典IDE,针对其因历史编码设置与现代系统不匹配而引发的控制台乱码问题,提供了从临时修改控制台代码页、配置编译器参数,到升级开发环境乃至调整系统区域设置的完整解决方案,旨在帮助开发者构建稳定、无乱码 阅读详情

学习编程,熟悉一门语言的最好方法就是写bug,并解决bug,作者将自己学习C\C++过程中的小bug都放出来,初学者踩完100个小bug,你就可以熟练地掌握C++了,还可以帮学妹查bug哦!

本专栏持续更新,建议初学者关注作者和专栏,一起进步!
如解决了您的问题,希望来个一键三连,点赞关注加收藏。

问题叙述:

char输出中文,正常;
wchar输出中文,乱码!
如图所示:
在这里插入图片描述
但是wchar确实没有问题的,问题应该出现在输出的过程中,如查看运行时内存,wchar正确!
在这里插入图片描述

问题代码:

#include<Windows.h>
#include <stdio.h>  
using namespace std;

int main()
{
	wchar_t  *wchar = L"Codebowl是个靓仔";
	char* ch = "Codebowl是个靓仔";
	printf("char is %s\n", ch);
	wprintf_s(L"wchar is %s\n", wchar);
	
	getchar();
	return 0;
}

解决方案

加入头文件#include
并添加代码setlocale(LC_ALL, “chs”);
这俩个作用的是设置语言运行环境,如这里的“chs”,就是设置中文运行环境!
再次运行问题解决!
在这里插入图片描述
问题解决代码

#include<Windows.h>
#include <stdio.h>  
#include <locale>
using namespace std;

int main()
{
	setlocale(LC_ALL, "chs");
	wchar_t  *wchar = L"Codebowl是个靓仔";
	char* ch = "Codebowl是个靓仔";
	printf("char is %s\n", ch);
	wprintf_s(L"wchar is %s\n", wchar);
	
	getchar();
	return 0;
}

bug原理分析

我们前面已经知道了如何解决,但是我们不能只知其然而不知其所以然,要不然都没办法给学妹讲为什么了。
那么我们下面来分析,为什么会出现bug:
这涉及到C++的区域化问题,想要输出宽字节的中文字符,需要设置一个区域,而我们的头文件#include 就是来解决这个问题的。
所以当我们修改代码后,设置了中文区域,whcar输出中文就正常了。

最后

留下一个问题:
1.为什么char输出中文是正常的呢?
2.如何让char输出中文也是乱码呢?
有需要的小伙伴可以私聊博主交流,博主也将在下一篇文章给出答案。

在本文中我给出了出现bug的代码和解决方案,以及最终代码,想要学习C++的初学者,可以按照这个顺序自己复现一遍,加深印象!
本专栏持续更新,建议初学者关注作者和专栏,一起进步!
如解决了您的问题,希望来个一键三连,点赞关注加收藏。

C++项目UTF-8编码改造实战:从乱码根源到跨平台统一 字符编码是计算机处理文本信息的基础,它定义了字符与二进制数据之间的映射关系。ASCII编码奠定了早期基础,但无法满足多语言需求,由此衍生出GBK等本地化编码方案,但也带来了跨平台乱码问题。Unicode标准通过为全球字符分配唯一码点,从根本上解决了字符集统一问题,而UTF-8作为其一种高效、兼容的实现方式,凭借其变长设计、完美兼容ASCII及无字节序问题等优势,已成为现代软件工程中文本处理的事实标准。其技术价值在于为跨平台、多语言应用提供了统一的字符表示基础,极大地简化了国际化开发流程。在C++工程实践中, 阅读详情

相关推荐

Dev-C++中文乱码解决方案与安全安装指南

Dev-C++作为经典C语言入门IDE,其核心价值在于轻量、稳定与教学友好性。解决中文乱码问题需理解Windows平台下GBK编码、GCC编译器字符集参数(-fexec-charset=GBK)、控制台渲染机制三者协同原理;而安全安装则依赖数字签名验证、可信源选择(SourceForge/GitHub)及路径/编译器/环境变量的精准配置。该工具虽不支持现代C++特性,却在高职、中职及信息学奥赛初训等场景中,以‘写→编→运’15秒闭环显著提升学习效率。本文聚焦可复现的Dev-C++中文支持全链路配置与零风险部

weixin_34242509的博客 408

c语言打印乱码_C语言打印字符乱码和char *字符循环赋值时“段错误 (核心已转储)”...

C语言打印字符乱码和char *字符循环赋值时“段错误 (核心已转储)”C语言打印字符乱码和char *字符循环赋值时“段错误 (核心已转储)”问题解决。1.打印字符乱码#include #include char *SYM="";void change(){char tmp[10]="SYM";printf("%d\n",tmp);SYM=tmp;}int main(int argc, char...

weixin_39623411的博客 657

C++中string转换为char*类型返回后乱码问题解决

主要介绍了C++中string转换为char*类型返回后乱码问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

c语言打印字符乱码和char *字符循环赋值时“段错误 (核心已转储)”问题解决

1.打印字符乱码 #include #include char *SYM=""; void change(){ char tmp[10]="SYM"; printf("%d\n",tmp); SYM=tmp; } int main(int argc, char *argv[]) { change(); printf("%d\n",SYM); printf("%s\n"

honyniu的专栏 3375

五大经典遥感数据集对比:LoveDA、Potsdam、Toronto、Vaihingen、Massachusetts Roads选哪个?

本文深度对比了LoveDA、Potsdam、Vaihingen、Toronto和Massachusetts Roads五大经典遥感数据集。针对城市监测、道路提取、土地分类等不同任务,从分辨率、标注质量、数据规模及场景多样性等核心维度进行分析,为研究者根据项目目标、硬件条件与应用场景选择最合适的遥感数据集提供决策指南。

weixin_29057065的博客 237

ubuntu安装glibc

VSCode 在ubuntu下调试无法打开libc-start.c raise.c等1. 安装glibc2. launch.json中添加路径映射3. 调试 1. 安装glibc apt install glibc-source cd /usr/src/glibc/ sudo tar -xvf glibc-[VERSION].tar.xz 2. launch.json中添加路径映射 "sourceFileMap": { "/build/glibc-S7xCS9": "/usr/src/glib

wq_0708的博客 3万+

char(utf8)转为wchar_t 中文乱码

MultiByteToWideChar函数可以将UTF-8编码的char类型字符串转换为wchar_t类型字符串。参数wchar_t类型,因此需要进行此类转换。经过多次尝试,以下方法可行。

不知东方之既白 1016

STM32版CCD线性摄像头寻线寻迹小车_stm32接ccd

目前大多数的小车寻线寻迹都是用红外对管寻线,这是比较简单也比较成熟的技术方案,且成本也低。本文将介绍使用CCD线性摄像头寻线寻迹。TSL1401 线性传感器由一个 1x128 的光电二极管阵列、相关的电荷放大电路以及一个内部像素数据保功能组成。内部像素数据保功能可以为所有像素点提供同时积分的开始和停止时间。该阵列由 128 个像素组成,每个像素的感光面积为 3,524.3 平方微米。像素之间的间隔为 8μm。内部控制逻辑简化了操作,该模块需要串行输入(SI)信号和时钟信号(CLK)。

2401_87557129的博客 3229

C++输出指向字符的指针乱码

//定义四个变量 int i = 100; char c = 'a'; char arr[5] = { 'a','b','c' }; int arr2[6] = { 1,23,4 }; //定义四个指针 int * p1 = &i; char * p2 = &c; char * p3 = arr; int * p4=arr2; //...

漫步云端 3706

C# Log4Net不输出日志的解决方法

log4net是一个流行的 .NET 日志框架,用于记录应用程序的日志信息。如果你在使用log4net。

精通搬砖,资深技术砖家,在软件开发,人工智能,设备开发等领域都有研究。商业合作&交流学习可私信联系。 1263

离线路径规划服务Graphhopper

离线路径规划服务Graphhopper 本文主要探索使用Graphhopper搭建离线路径规划服务,需要掌握一定的JAVA基础环境配置的知识 文章目录离线路径规划服务Graphhopper前言一、Graphhopper是什么?二、使用步骤1.下载Graphhopper2.从OpenStreetMap下载路图数据3.安装Graphhopper所需环境4.修改配置5.启动Graphhopper总结 前言 在外网环境中可以使用百度、高德等第三方的sdk用以实现路径规划的功能,由于项目的需要,在离线环境中需要使

Sysdark的博客 7561

C++ ifstream open 读取txt/json文件出现中文乱码的解决问题

C++ ifstream open 读取txt/json文件出现中文乱码的解决方法 作者:虚坏叔叔 博客:https://xuhss.com 早餐店不会开到晚上,想吃的人早就来了!😄 在编程中,我们经常需要对txt/json文件进行读写操作,有时候由于编解码问题,txt读写会出现乱码问题。下面介绍一种基于ofstream和ifstream的txt文件读写方法,并介绍txt文件读写的乱码解决方案。 一、txt文件写入 #include <fstream> #include <iostre

编辑编辑器 1万+

STM32H743+YT8512C以太网通信实战:CubeMX与LWIP配置详解

本文详细解析了基于STM32H743微控制器与YT8512C PHY芯片的以太网通信实战方案。通过CubeMX工具进行RMII接口、MPU、时钟树等关键硬件配置,并重点阐述了如何修改LWIP协议栈驱动代码以适配YT8512C芯片,解决了LAN8742驱动不兼容的问题。文章提供了从工程创建、代码适配到调试验证的完整步骤,帮助开发者快速实现稳定可靠的嵌入式网络连接。

weixin_29190573的博客 561

C++ 解决中文乱码问题

设置控制台字符编码:如果你的程序在控制台中输出中文字符时乱码,可以尝试设置控制台的字符编码。源代码保存为 UTF-8 编码:确保你的源代码文件以 UTF-8 编码保存。UTF-8 是一种支持多语言的字符编码方式,可以正确地表示中文字符。在 Linux 或 macOS 系统中,默认情况下控制台已经使用 UTF-8 编码,无需额外设置。在 C++ 中解决中文乱码问题通常涉及到字符编码和字符集的处理。

qq_43528842的博客 8538

Allegro格式PCB转换成Pads操作指导

变量:AEX_BIN_ROOT 值:D: MentorGraphics>PADSVX1.2>SDD_HOME>translators>win32bin (值:软件按装的位置,可以是9.5版本,也可以是VX1.0等不同的版本)。变量:HOME 值:C:Users>win7>AppData>Roaming>SPB_Data (这个值是allegro快捷键存放位置器,也可以随意放置在那个盘,我们可以采用默认的路径)。第4步:打开 PADSLayout软件,然后选择导入文件,选择刚刚处理的 allegro文件。

weixin_54787054的博客 3720

半导体物理基础:载流子输运理论_(4).载流子浓度与费米能级

费米能级(Fermi Level)是描述半导体中电子和空穴能量分布的基准能级。在绝对零度下,费米能级以下的所有能级都被电子占据,费米能级以上的所有能级都是空的。随着温度的升高,电子会获得足够的能量跃迁到费米能级以上的能级,形成导带中的自由电子和价带中的空穴。费米能级在半导体中的位置取决于掺杂浓度和温度。对于本征半导体,费米能级位于禁带的中心;对于掺杂半导体,费米能级会偏移,具体位置取决于掺杂类型和浓度。载流子浓度(Carrier Concentration)是指半导体中自由电子和空穴的数量密度。

2401_87715305的博客 834

char,wchar_t,ACHAR,WCHAR,TCHAR类型字符串的区别和使用的场景

不同类型字符串区别和使用的场景

qq_44985397的博客 1656

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

string转wchar_t*和QString转wchar_t*

string转wchar_t* 首先介绍下wchar_t类型 一、wchar_t类型的由来 我们知道char类型变量可以存储一个字节的字符,它用来保存英文字符和标点符号是可以的,但是对于汉字、韩文以及日文这样的字符却不可以,因为汉字、韩文以及日文每一个文字都占据两个字节,为了解决这个问题,c++提出了wchar_t类型,称之为双字节类型,又称宽字符类型。 二、下面是一个范例 int main(int argc, wchar_t* argv[]) { //使用setlocale函数将本机的语言设置为中文

weixin_42029812的博客 5365

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

C++使用gSoap调用C#写的webservice中文乱码问题

因为使用MS的SoapToolkit的库调用webservice,在服务器端获得的数据为null,今天改用gSoap。 看了官方教程后,折腾了很久终于将gSoap生成的代码整合到自己的项目里面,但却遇到了传输中文时乱码的问题。 查看了好几篇文章和帖子,终于解决了 其中的几篇文章或者帖子的URL: http://topic.youkuaiyun.com/u/20090610/14/02d3877b-8e

yunffern的专栏 1856

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

彻底解决Visual Studio C/C++项目UTF-8中文乱码:从原理到实战

字符编码是软件开发中处理文本数据的基础概念,它定义了字符与二进制数据之间的映射规则。在Windows平台,特别是使用Visual Studio进行C/C++开发时,由于历史原因,默认的ANSI(如GBK)编码与当前主流的UTF-8编码标准存在冲突,导致源代码、编译过程和运行时环境三者间的编码不一致,从而引发中文乱码问题。理解并统一编码链路的原理,对于保障代码的可读性、可维护性和跨平台兼容性具有重要技术价值。本文聚焦于Visual Studio这一集成开发环境,针对C/C++项目迁移至UTF-8编码时遇到的典

weixin_33711647的博客 495

中文文件的读取

用fopen_s()函数读取中文文件时会出现乱码。1.在C++中可以使用:_wfopen_s()函数去打开中文文件。函数: _wfopen_s(FILE**fp,L"文件路径",L"文件的使用方式")2.使用:fgetws()函数去读取中文文件。函数:fgetws(wchar_t*wstr,int len,FILE*fp);参数:wchar_t*wstr   // 是自己定义的一块数组      ...

Clever_Pig的博客 2450

C语言宽字符编程:wchar_t与wprintf实战指南

字符编码是计算机处理文本的基础,它定义了字符与二进制数据的映射关系。ASCII编码解决了英文表示问题,但无法满足全球多语言需求,由此诞生了Unicode统一字符集。Unicode通过UTF-8、UTF-16等编码方案实现跨语言支持,其中C语言的wchar_t类型和wprintf函数就是基于Unicode的宽字符处理机制。这套机制的技术价值在于为程序提供国际化支持,使软件能够正确处理中文、日文、阿拉伯文等多语言文本。在实际应用场景中,宽字符编程特别适用于需要本地化的软件、多语言文本处理系统以及与Windows

weixin_33970449的博客 323

c#调用包含结构体嵌套的C++ dll函数

在痛苦了两天后,终于搞定了。主要是中文乱码问题,最后受C#调用C/C++DLL收取中文字符处理这篇文章的启发,才弄好。核心思想:c++中的char是一个字节,wchar 是两个字节,c#中的char是两个字节。 ====================== C++代码========================== 里面出现的TCHAR为: typedef wchar_t WCHAR; typ...

qq_30625217的博客 3158

Windows C++ MFC 多字节与 Unicode

除了要将 char 改成 WCHAR,使用 char 的相关 API 也要改成 W 版本,而且要小心,有些 char 数组是做为缓存的,不是路径,不需要修改。但是使用这个选项的前提是代码里与路径相关的变量必须使用 TCHAR 数组、LPTSTR(本质是 TCHAR*)、LPCTSTR(本质是 const TCHAR*)才行,而客户代码里使用的全是 char 数组和 char*、const char*,所以改字符集是不行的(行的话也不会当一期项目发包过来)。在调用到 fopen_s 的时候程序就会报错退出。

2502_92636479的博客 1061

C++中的字符编码方式

目录 1.char 2.wchar_t 3.TCHAR 4.一些函数 1.char转化为 16进制字符串 2.字符串的UTF-8与GBK(或GB2312)编码转换 C++基本数据类型中表示字符的有两种:char、wchar_t。 1.char 一个char占一个字节。中文字符占用的是2个字节,即2个char。英文字符,占用的是1个字节,即1个char。 下面定义的“st...

u012138730的专栏 1万+

CCS中文乱码全链路解析与四层防御实战指南

嵌入式开发中,字符编码是连接源码、编译器、运行时与终端的关键基础概念。其核心原理在于不同环节对字节序列的解释规则不一致——Windows系统默认CP936(GBK),而现代工具链倾向UTF-8,导致多字节中文在文件读写、预处理、printf输出及串口显示等环节被错误解析。这种编码错位不仅影响可读性,更会引发编译失败、调试误判与硬件误操作等实质性工程风险。典型应用场景包括TI CCS环境下C2000/MSP430/Sitara系列DSP与MCU开发,尤其在高校竞赛、工业控制与电力电子调试中高频出现。本文聚焦C

weixin_34212762的博客 330
上一篇: 奇奇怪怪的bug,“cout”不明确及解决方案
下一篇: 一文带你彻底搞懂i++和++i的区别,谁的效率更高?
CodeBowl
博客等级 码龄5年 7664粉丝 67原创
评论 37
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值