输出乱码问题几乎是所有的程序员都会遇到的问题,总是让我们头痛不已。这里我们简单讲讲原因,并对最常见的乱码问题给出解决方案。
参考资料:
将powershell的编码默认改为UTF-8_中路厨师长的博客-CSDN博客_powershell utf-8
Windows10如何将命令提示符替换为PowerShell-百度经验
powershell、cmd终端修改编码 - xututu6 - 博客园
原因
出现乱码一定是因为解析文件的时候采用了错误的编码格式。对于不同的情况,具体的解析器不同,所以解决方法也不同,但是万变不离其宗,只要让解析器采用了正确的解析方式 / 输入的文件采用正确的编码格式,问题就会迎刃而解。
其中最常见的,就是在控制台中输出的时候出现的乱码问题。这是因为中文的win默认的控制台是GB2312,而我们常用的编码格式是utf8。
我开始以为是换语言就可以了,结果系统换成英文的也没有效果。后来我突然想起来,在官网下载镜像的时候有选择语言这一项,如下图所示。我也试过网上改注册表,改地区等等方法,一个都不好用,甚至会导致一些更麻烦的问题。
解决方案
既然我们的问题的根源是控制台的编码有问题,那我们就把控制台的编码换成utf8就行了。
题主这里默认的控制台使用的是PowerShell,不确定cmd是否具有同样的功能。
修改默认控制台为PowerShell的方法
win11
先打开控制台(cmd/powershell均可) -> 点击右边下拉箭头 -> 选择设置 -> 默认配置改为PowerShell
win10
控制台 -> 任务栏和导航 -> 打开“当我右键单机“开始”按钮或按下windows键。。。”
修改powershell的编码
- 管理员身份打开powershell,输入以下代码。
New-Item $PROFILE -ItemType File -Force
- 找到以下路径的文件,打开。默认是空的,输入下面内容,保存。
$OutputEncoding = [console]::InputEncoding = [console]::OutputEncoding = New-Object System.Text.UTF8Encoding
-
管理员身份打开PowerShell,输入以下代码。
Set-ExecutionPolicy Unrestricted
-
输入chcp,查看代码是否为65001(utf8)
注意
如果使用idea,clion,webstore, vscode等,不要忘记修改IDE的文件编码格式。
j家全家桶(idea,clion,webstore等)修改方式:
setting -> files -> file encodings 修改下图中三处地方
在主页面的右下方也查看当前文件采用的编码格式,如果没有显示,请在设置中打开。
补充
chcp使用的编码以及其对应的语言
编码页 | 国家(地区)或语言 |
---|---|
437 | 美国 |
708 | 阿拉伯文(ASMO 708) |
720 | 阿拉伯文(DOS) |
850 | 多语言(拉丁文 I) |
852 | 中欧(DOS) - 斯拉夫语(拉丁文 II) |
855 | 西里尔文(俄语) |
857 | 土耳其语 |
860 | 葡萄牙语 |
861 | 冰岛语 |
862 | 希伯来文(DOS) |
863 | 加拿大 - 法语 |
865 | 日耳曼语 |
866 | 俄语 - 西里尔文(DOS) |
869 | 现代希腊语 |
874 | 泰文(Windows) |
932 | 日文(Shift-JIS) |
936 | 中国 - 简体中文(GB2312) |
949 | 韩文 |
950 | 繁体中文(Big5) |
1200 | Unicode |
1201 | Unicode (Big-Endian) |
1250 | 中欧(Windows) |
1251 | 西里尔文(Windows) |
1252 | 西欧(Windows) |
1253 | 希腊文(Windows) |
1254 | 土耳其文(Windows) |
1255 | 希伯来文(Windows) |
1256 | 阿拉伯文(Windows) |
1257 | 波罗的海文(Windows) |
1258 | 越南文(Windows) |
20866 | 西里尔文(KOI8-R) |
21866 | 西里尔文(KOI8-U) |
28592 | 中欧(ISO) |
28593 | 拉丁文 3 (ISO) |
28594 | 波罗的海文(ISO) |
28595 | 西里尔文(ISO) |
28596 | 阿拉伯文(ISO) |
28597 | 希腊文(ISO) |
28598 | 希伯来文(ISO-Visual) |
38598 | 希伯来文(ISO-Logical) |
50000 | 用户定义的 |
50001 | 自动选择 |
50220 | 日文(JIS) |
50221 | 日文(JIS-允许一个字节的片假名) |
50222 | 日文(JIS-允许一个字节的片假名 - SO/SI) |
50225 | 韩文(ISO) |
50932 | 日文(自动选择) |
50949 | 韩文(自动选择) |
51932 | 日文(EUC) |
51949 | 韩文(EUC) |
52936 | 简体中文(HZ) |
65000 | Unicode (UTF-7) |
65001 | Unicode (UTF-8) |