让Windows CMD默认使用UTF-8代码页,解决一切恼人乱码问题!

  • Post author:
  • Post category:其他




问题描述

中文Windows自带的命令行程序默认都是使用的936代码页,也就是GBK的编码,因此当程序以UTF-8编码输出文本时,就会看到乱码:

CMD属性对话框截图

该问题在自己写的C/C++程序中最常见,当源文件以UTF-8编码时,用

printf



std::cout

等方法打印出来的全都显示乱码,关于C/C++的编码问题可以参见

此前的一篇博客

。不仅如此,一些间接依赖于Windows原生命令行的程序也会产生乱码问题,例如VS Code的内置终端、Qt Creator等:

Qt Creator错误窗口乱码


这个问题还会导致“字体”选项卡中没有多少选项,使得我们没法用自己安装的等宽字体,使得命令行用起来非常难受……



解决方案

要想从根本上解决问题,必须修改命令行的默认编码,其默认编码是默认跟随系统语言配置的,今天我终于在Windows的语言设置里找到了这个选项:

  1. 打开设置,进入语言页面:

    在这里插入图片描述

  2. 点击“管理语言设置”,再点击对话框上的“更改系统区域设置”:

    在这里插入图片描述

  3. 勾选下图中的选项:

    在这里插入图片描述


  4. 重启电脑

    ,然后你就会神奇地发现CMD和Powershell的代码页都默认变为65001了!

    在这里插入图片描述



注意事项

Stackoverflow上流传一种往注册表里写入

@chcp 65001

的方案,亲测这种办法没法解决根本问题,而且会导致原来不乱码的程序变乱码!

https://stackoverflow.com/questions/14109024/how-to-make-unicode-charset-in-cmd-exe-by-default



副作用

相信大家肯定能想到,既然有应用因为这项变动不乱码了,那么就会有应用因为这些改动乱码!

这些应用大多是国产的一些软件,它们使用Windows默认的编码输出汉字,所以当你改用UTF-8时,它们反而不好了!

目前已知的一款应用受此影响的是深信服的EasyConnect客户端,它连接成功的提示消息会变成乱码,不过不影响其它的正常使用:

请添加图片描述

如果有朋友发现了因此导致无法运行的应用,请在下面评论区指出。

考虑到这个副作用,那么到底换不换编码呢?这是一个权衡,得看你用的国产软件多不多、以及UTF-8的软件多不多了……或者说,看你是把自己定位为一个普通计算机用户还是软件开发者。



相关文献


  1. 修改Windows控制台默认代码页编码的几种方法

  2. How to set the text encoding within the “Application Output” window?



版权声明:本文为u014132143原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。