解决vscode终端乱码问题【疑难杂症,使用chcp命令修改活动代码页无效的解决方法】

问题描述

使用vscode的code runner插件在vscode的终端中运行程序的时候,程序中输出的中文没法正确的显示,显示出来的是乱码,如下图所示
在这里插入图片描述

问题分析

** 这个乱码问题的本质就是代码的编码和终端的编码不一样 **
在vscode终端中输入chcp即可查看活动页代码,这个活动页代码 常见的有两个936和65001
其中936代表gbk
65001代表utf-8
在这里插入图片描述
可以在vscode的右下角看到目前文件的编码
在这里插入图片描述可以发现文件编码和终端的编码不一样,这就是我运行程序输出乱码的原因

问题解决

明确了问题的原因那么解决问题的方法也就很明确了,那就是将终端和代码文件的编码统一,无论是把终端和文件的编码统一到utf-8还是gbk都可以,反正统一了就不会出现乱码(记住这个思路,当遇到疑难杂症的时候会有用),目前网上的解决方法都是基于这一种思想的,只不过具体的实现方法不同,这里列举几种(不是我要讲的重点,所以仅仅只是列举,不做详细论述,其他的博主讲的已经很详细了)
首先要明确一点,目前的情况下,windows终端的默认编码是gbk,而vscode的默认文件编码是utf-8

  • 最暴力方法,直接在系统的时间和地区那个地方改成utf-8,这样终端也会变成utf-8,就跟vscode统一了
  • 在vscode的终端中使用chcp 65001命令修改为utf-8,但是这个方法只对于这个终端生效,当重启或者使用其他终端的时候就需要再次更改(暂时法)
  • 也是只改终端,把终端改为utf-8 ,但是用持久的方法,就不需要每次都改
  • 修改vscode文件的编码,使得与终端相同
    上面的方法中我一开始选择的是方法二,虽然看起来是暂时法,使用其他会很不方便,但是我个人认为胜在灵活,不用方法是因为有风险,如果一个崭新的电脑这样没有什么问题,但是电脑上如果已经安装了很多东西,修改系统的这个设置就有可能导致某些程序运行异常,方法三也很好,但是我觉得不太灵活,因为持久修改了终端的编码,有些东西可能之前能跑现在就跑不了了。方法四也不错,但是目前主流是utf-8,改成gbk通用性不高。

接下来展开讲一下我选择的方法二,基本方法二的使用很简单,在vscode终端中敲入以下命令即可
chcp 65001
然后就会看到
在这里插入图片描述
这个就表示活动代码页切换到了65001,正常情况下,这样就可以了,使用code runner在这个终端中运行程序就不应该有乱码了,但是我的不一样
在这里插入图片描述
很多人到这一步就成功输出了文字,但我的还是乱码,在网上查了很久都没有找到遇到同样问题的,最后解决了,所以记录下来,希望能帮助到有同样问题的人

具体流程

还记得之前说的核心思想吗,将终端和代码文件的编码统一,看到这种情况,我的判断是chcp的修改并没有真正成功,编码仍然不统一,不然不会是乱码,但是chcp输出的结果表示是成功的 ,这就意味着这玩意已经废了,我们需要换一个命令。所以我使用[Console]::OutputEncoding进行了查询
在这里插入图片描述可以发现出现了很荒谬的一幕,上面明明提示修改成65001了,但是下面还是936,并且显示的也是gbk,现在我们已经完全可以明确原因了,就是chcp修改失败了,那接下来我们只需要用其他命令来修改即可
我这里选择[Console]::OutputEncoding = [System.Text.Encoding]::UTF8命令
效果如下
在这里插入图片描述可以发现现在已经变成了65001,并且编码也是utf-8了
运行一下程序试试
在这里插入图片描述果然成功了,问题得到了解决
但是到这里还没有结束,这个命令跟chcp 65001不一样,它太长了,不好记忆,如果我们每打开一个终端都需要这样输入的话,也太麻烦了,所以我们需要把它持久化,持久化的思路有很多,但是我个人希望对其他的影响最小,所以我选择了修改vscode中的配置文件,具体操作如下
首先打开设置
在这里插入图片描述然后搜索terminal.integrated.profiles.windows点击在json文件中编辑

在这里插入图片描述按照如下样式(注意位置别填错了,目前code runner运行代码默认使用powershell,所以我只改了powershell这里的,如果需要改command prompt命令提示符的则需要修改一下命令)填入配置文件"args": ["-NoExit", "-Command", "[Console]::OutputEncoding = [System.Text.Encoding]::UTF8"]
在这里插入图片描述
这行配置文件的意思就是在启动终端的时候带着以下参数执行,最后的效果就相当于每次一启动终端就自动执行[Console]::OutputEncoding = [System.Text.Encoding]::UTF8"],从而达到设置编码的作用,这样的修改保证了影响程度的最小,只会影响到vscode中(执行代码时我们开启的)终端,而在vscode之外使用终端去运行一些程序依然是gbk,这就杜绝了修改对那些程序运行的影响。
接着保存配置文件、关闭现有的终端并重启vscode,然后直接执行代码就会发现可以了
在这里插入图片描述

参考文献

Terminal Profiles

  • 8
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值