解决VS2019默认用GBK编码导致输出中文乱码的问题

更新日志

10.19更新

  • 增加了注册表中没有VSConsole的注册表项时的解决方法
  • 增加了关于在机房环境下解决乱码问题的方法

前言

其实网上关于解决这个问题的博客已经有很多了,但是我尝试了很多方法之后都或多或少有不满意的地方,终于自己也摸索出了一套自我感觉相对完美的解决方案,因此发出来供后人参考。

在自己电脑环境解决中文乱码问题

经过查阅资料和自己摸索尝试后,我总结了下解决用VS写的代码中的中文提交后会乱码的方法。 这个问题的原因在于评测环境和VS的编码不一致,VS默认是以GBK编码代码文件,而评测环境是UTF-8编码,因此本地写好的代码交上去后会在评测机中乱码,所以解决方法就是把VS的编码改为UTF8。 网上的操作大概有这么几种:

  1. 在文件-高级保存选项中改编码为UTF-8。这个方法的缺点是只能一个一个文件改,而且新建的文件依然默认是GBK编码,因此并不方便。并且在VS2019中,高级保存选项的入口被藏的很深,还需要想办法在视图栏中调出来,因此不推荐。
  2. 安装一个名为Force UTF-8(No BOM)的插件(UTF8有BOM和No BOM两种,为了更好的兼容性,我建议使用No BOM的),这样新建的文件在保存时都会转换成UTF8编码保存。这个插件很小,只有9kB,因此我建议使用此方法。
    在这里插入图片描述

至此,问题的第一阶段解决了,从而确保了我们在本地写的代码在其他平台上运行不会乱码。但是另一个问题出现了,那就是VS控制台里输出中文的时候会乱码,这个虽然不影响在其他平台上的输出结果,但是对于我们本地调试来说还是或多或少有些不方便。

这个问题同样是编码不一致引起的,VS控制台的默认编码也是GBK,所以识别UTF8编码的中文就会乱码,因此我们需要改VS控制台的编码。

网上的教程主要是这些解决方法:

  1. 通过改注册表来改cmd powershell的默认编码,但是我在自己的电脑上尝试的过程中遇到的问题有:找不到cmd的注册表项;改了powershell的默认编码后,打开VS控制台发现依然是GBK编码。
  2. 在时钟-区域中开启全局Unicode编码,但是这个方法副作用不小,虽然控制台不乱码了,但是一些其他的软件可能会乱码。例如,我用7zip打开一个压缩包,里面的中文文件夹名变成了乱码。

后来我发现其实VS控制台在注册表中也有条目,具体路径如图(我的VS的安装路径是D:\Software\VisualStudio,在注册表中的名称可能会因为安装路径的不同而有所不同,但是最后一定以是VsDebugConsole.exe结尾的)

注:如果找不到VSConsole的注册表项,请看下一节“如果注册表中没有VSConsole的注册表项”
在这里插入图片描述

修改的步骤如下(有不明白的步骤可参考上图):

  1. 按下win+r,输出regedit,打开注册表编辑器
  2. 在注册表编辑器中打开路径HKEY_CURRENT_USER\Console
  3. 选中名字中有VsDebugConsole.exe的那个文件夹
  4. 打开CodePage,修改其值为十进制的65001(即UTF8编码),如果没有CodePage这项,就自己右键新建一个DWORD类型的值,名为CodePage,值为十进制的65001
  5. 保存(无需重启电脑,会立即生效)

如果一切正常的话,此时我们尝试用VS运行代码,中文应该可以正常显示了,在VS控制台的窗口标题处右键-属性,打开选项页,可以看到当前代码页为65001,表示修改成功,从此,在VS里创建的代码和开启的控制台都会默认用UTF-8编码,乱码的问题就较完美的解决了。
在这里插入图片描述

如果注册表中没有VSConsole的注册表项

一句话概括此方法:自己创建。

  1. 打开VSConsole,然后打开任务管理器,在“进程”页选中VS调试控制台,在上面右键-打开文件所在的位置
  2. 记录下VS调试控制台的绝对路径(含.exe文件)。例:在我的电脑上,这个路径为D:\Software\VisualStudio\Common7\IDE\CommonExtensions\Platform\Debugger\VsDebugConsole.exe
  3. 将路径中的斜杠\全替换为下划线_,然后复制到粘贴板。例:D:_Software_VisualStudio_Common7_IDE_CommonExtensions_Platform_Debugger_VsDebugConsole.exe
  4. 打开注册表编辑器,进入路径HKEY_CURRENT_USER\Console\,在Console上右键-新建-项,将刚才复制的路径粘贴到这项的命名中
  5. 打开刚才新建的这项,在我的电脑上,此时在注册表中的路径为HKEY_CURRENT_USER\Console\D:_Software_VisualStudio_Common7_IDE_CommonExtensions_Platform_Debugger_VsDebugConsole.exe
  6. 在这个路径下右键-新建-DWORD值,命名为CodePage,值为十进制下的65001,保存
  7. 重新打开VSConsole,检查中文是否能正常输出,如果正常,教程结束

机房环境下解决中文乱码问题

在机房环境下解决的方法和自己电脑类似,不过具体步骤略有不同,为了节约篇幅我在这部分会写的相对简略,有不懂的地方可以参考自己电脑环境部分的类似操作。
具体分为3步,其中第一步的作用是使在机房电脑上写的代码用UTF-8保存,从而确保提交到评测机后中文不会乱码。第2、3步的作用是使得在机房电脑上运行代码时,控制台里输出的中文不会乱码。第1步必做,第2、3步只是为了本地调试方便,不做不会影响在评测机上的运行结果。

  1. 在VS中安装Force UTF-8(No BOM)插件并安装。完成此步后本机写的代码都会保存为UTF-8编码,从而确保提交到评测机后中文不会乱码。
  2. win+r输入cmd,打开命令行,在窗口标题处右键-默认值,设置字体为新宋体,如果不做这一步,做完下一步后终端里的中文还是会乱码(因为字体不支持显示中文,而不是因为编码)
  3. 打开注册表,在路径HKEY_CURRENT_USER\Console下创建DWORD类型的值,为名CodePage,值为十进制的65001,保存
  • 26
    点赞
  • 62
    收藏
    觉得还不错? 一键收藏
  • 15
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值