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++]的主要内容,如果未能解决你的问题,请参考以下文章