关于vs2019控制台输出中文时乱码的问题

关于Visual Studio 2019控制台输出中文时乱码的问题

  中文乱码是我在使用vs2019写C/C++时不时出现的问题,曾经出现过几次我是直接放弃中文直接打印英文来解决,这次又出现了我终于下定决心花时间去搞懂问题的原因是什么,但这是我个人的理解不能保证一定正确。

环境: Windows11 Visual studio 2019

  1.首先中文乱码问题我分为两种,一是打印文本文件时出现乱码,如下面这段代码,

#include <stdio.h>
int main()
{
	FILE* fp = fopen("input.txt", "r");

	char text[100];
	fgets(text, 100, fp);
	printf("%s", text);

	fclose(fp);
	return 0;
}

在这里插入图片描述
在这里插入图片描述

我从input.txt文件读出一行文本存入text字符串中并打印,这时出现的乱码问题的原因就是input.txt文件的编码问题。

  2.第二种情况是直接打印时出错,test.c里的代码如下,

char s[20] = "中文乱码问题";
	printf("%s\n", s);

在这里插入图片描述

定义并初始化了一个字符串然后打印,出现乱码问题,这时的问题就是本身源代码test.c的编码问题。
  区分好这两种不同种类的乱码问题之后,我们就可以着手解决了。我们知道中文乱码的本质就是编码不匹配的问题,就好像明明是utf-8的编码你用GBK去理解当然是无法匹配的。
  在我看来乱码问题的出现还是我们自身的原因,因为原本的环境在自己不乱来的情况下是不会出现乱码问题的。首先我们先得知道windows下的中文是GBK编码,VS2019也是GBK编码,所以在windows里编程中文最好就是用GBK编码。在第一种情况里,要正确打印文件里的文本,显然要保证input.txt是GBK编码,所以我们可以用记事本打开input.txt,如下
在这里插入图片描述
可以看到右下角编码是utf-8,显然不对,我们点击左上角的文件–>另存为,
在这里插入图片描述
把编码改成ANSI并保存,注意GBK是ANSI的一种,所以这时我们就保证了编码的一致性,可以正常打印中文文本了。

  第二种情况就是test.c的问题了,我们把“中文乱码问题”字符串存入text字符串里,然后打印,中文乱码,说明是text.c里的中文编码与调试控制台的编码不一致造成的,右键控制台边缘,点击属性,
在这里插入图片描述
可以看到控制台的编码是GBK,所以我们修改test.c的编码就好,先把test.c重命名为test.txt用记事本打开,
在这里插入图片描述

果然不是ANSI,我们把编码改成ANSI然后在重命名回test.c就可以了。
  针对中文乱码问题,在网上还有在VS上安装UTF-8插件和更改系统区域设置使windows全局使用utf-8的两种方法,我一开始就是用的这两种方法,结果是解决了但是也没有完全解决,先是把我的.c代码里所有的中文注释都搞成了乱码[手动裂开],并且第二种方法的bug是在跑以前的一些实验环境时控制台输出的还是乱码,害的我又改回来了。得到了教训,一般的环境不可轻易修改,怎么说vs也是宇宙最强IDE肯定是我们自身的问题。
  而至于为什么会出现这样的问题,就可能是使用了其他的编辑器打开了.txt或.c文件如记事本和vscode,把编码修改成了utf-8,我就是。所以windows下编程遇到乱码问题先考虑是否是GBK编码被意外修改成了utf-8,根据情况去解决就好了。
  觉得对你有帮助的话,就点个赞呗,虽然没啥用,但是对我写一些知识小分享还是莫大的鼓励,thanks。

  • 16
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值