本篇技术博客旨在解决VScode运行代码过程中终端输出中文乱码的问题。
问题起源
博主最近在复习C语言的过程中,使用VScode作为自己的编辑器,但是VScode有个问题,他在输出中文的时候会输出乱码,笔者对于UTF-8/GBK之类的编码知识略有学习,所以一开始以为自己是代码的编码方式选错了,于是在UTF-8与GBK两种编码中间横跳,发现无论是选择UTF-8还是GBK都无法解决中文乱码的问题。
在经过了漫长的查找资料和尝试以后,博主发现了中文乱码背后的原因,由于VScode本身是一个编辑器,所以其本身是不具备代码运行的能力的,我们需要下载GUN集成开发环境,博主选择的是Mingw+VScode下C/C++插件这样的一个组合。
下面是中文乱码的原因解释:
- 我们代码的编码是UTF-8 把UTF-8编码的代码交给Mingw,它也默认当做UTF-8处理(目前为止这是正确的)
- Mingw处理后生成的数据还是UTF-8编码(目前为止还是正确的)
- 把Mingw处理后的数据(UTF-8编码)给cmd(目前为止也是正确的)
- cmd按GBK编码处理它(UTF-8),这时出现错误,所以出现乱码!
知道了原因以后,我们有两种思路去解决这个问题:
1.将CMD转化为UTF-8编码。
2.将Mingw由UTF-8编码经过转码为GBK编码交给cmd,
下面我分别对两种方案进行尝试:
解决问题方案一
· 查看我们cmd的编码环境 : (打开cmd并且输入命令chcp)
所以我们只需要修改这里的code page的值就可以了。(修改以前一般是936)
我们输入命令:
chcp 65001
即可以将cmd从GBK/GB2312转化为UTF-8编码。
关于代码页的详细了解:
这个时候再编译代码即可看到中文:
但是这种解决方案他只能临时解决问题,一旦cmd关闭,系统自动重置chcp的值,则中文输出重新会变为乱码:
当然通过修改注册表的数值是可以达到永久修改chcp的值的:
具体操作如上图:打开注册表编辑器,然后再在这个目录下新建一个字符串,并且将其赋值为chcp 65001。
==============================================
这里应该是写到powershell下面,或者将vscode 的terminal端切换到cmd,具体可以看:如何在powershell中修改编码默认值