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

Posted CodeBowl

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了wchar输出中文乱码问题,如何解决! [100个bug帮你学会C++]相关的知识,希望对你有一定的参考价值。

学习编程,熟悉一门语言的最好方法就是写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++的初学者,可以按照这个顺序自己复现一遍,加深印象!
本专栏持续更新,建议初学者关注作者和专栏,一起进步!
如解决了您的问题,希望来个一键三连,点赞关注加收藏。

以上是关于wchar输出中文乱码问题,如何解决! [100个bug帮你学会C++]的主要内容,如果未能解决你的问题,请参考以下文章

MFC中输出String类型(内容为01串)出现乱码

解决IDEA控制台中文乱码问题

delphi控制台程序输出中文乱码,如何解决?

python输出到文件乱码如何解决

PHP - 如何解决中文乱码

解决VS2010/2013/2017输出的中文为乱码或“??????”的问题