中文Windows自带的命令行程序默认都是使用的936代码页,也就是GBK的编码,因此当程序以UTF-8编码输出文本时,就会看到乱码:
该问题在自己写的C/C++程序中最常见,当源文件以UTF-8编码时,用printf、std::cout等方法打印出来的全都显示乱码,关于C/C++的编码问题可以参见此前的一篇博客。不仅如此,一些间接依赖于Windows原生命令行的程序也会产生乱码问题,例如VS Code的内置终端、Qt Creator等:
这个问题还会导致“字体”选项卡中没有多少选项,使得我们没法用自己安装的等宽字体,使得命令行用起来非常难受……
要想从根本上解决问题,必须修改命令行的默认编码,其默认编码是默认跟随系统语言配置的,今天我终于在Windows的语言设置里找到了这个选项:
-
打开设置,进入语言页面:
-
点击“管理语言设置”,再点击对话框上的“更改系统区域设置”:
-
勾选下图中的选项:
-
重启电脑,然后你就会神奇地发现CMD和Powershell的代码页都默认变为65001了!
Stackoverflow上流传一种往注册表里写入@chcp 65001的方案,亲测这种办法没法解决根本问题,而且会导致原来不乱码的程序变乱码!
相关文献https://stackoverflow.com/questions/14109024/how-to-make-unicode-charset-in-cmd-exe-by-default
- 修改Windows控制台默认代码页编码的几种方法
- How to set the text encoding within the “Application Output” window?