问题现象
在 Windows 的终端或 PowerShell 中,有时会遇到中文显示异常的问题,例如:
- 中文显示为乱码;
- 中文显示为问号;
- 某些命令输出中文时无法正常显示;
- Python、Git、npm 等工具在终端里输出中文异常。
这类问题通常和终端编码、PowerShell 输出编码或字体设置有关。
本文记录一种常用解决方法:让 PowerShell 默认使用 UTF-8 编码。
解决思路
PowerShell 中影响中文显示的关键点主要有三个:
- 当前终端代码页是否为 UTF-8;
- PowerShell 的输出编码是否为 UTF-8;
- 终端字体是否支持中文。
其中,UTF-8 对应的代码页是:
| |
如果 PowerShell 每次打开后都自动切换到 65001,并且输出编码也是 UTF-8,那么大多数中文乱码问题都可以解决。
永久设置 PowerShell 使用 UTF-8
打开 PowerShell,执行:
| |
如果提示文件不存在,就选择新建。
然后在打开的配置文件中加入下面内容:
| |
保存文件后,关闭当前 PowerShell 窗口,并重新打开一个新的 PowerShell。
配置说明
这三行配置分别表示:
| |
将当前终端代码页切换为 UTF-8。> $null 的作用是隐藏 Active code page: 65001 这类提示信息,让每次打开 PowerShell 时界面更干净。
| |
设置控制台输出编码为 UTF-8。
| |
设置 PowerShell 向外部程序传递文本时使用 UTF-8 编码。
如何测试是否成功
重新打开一个新的 PowerShell 窗口后,依次执行下面命令:
| |
如果输出类似下面这样:
| |
说明当前终端代码页已经是 UTF-8。
继续测试中文输出:
| |
如果能够正常显示:
| |
说明终端已经可以正常显示中文。
再检查 PowerShell 的输出编码:
| |
如果两个结果都是:
| |
说明 PowerShell 的输出编码也已经设置为 UTF-8。
也可以使用下面这组命令一次性检查:
| |
理想结果类似:
| |
出现这个结果,就说明 UTF-8 配置已经生效。
实际测试结果示例
下面是一次成功配置后的测试结果:
| |
这说明:
- 当前代码页是 UTF-8;
- 中文可以正常输出;
- PowerShell 控制台输出编码是 UTF-8;
- PowerShell 的
$OutputEncoding也是 UTF-8。
因此可以判断:配置成功。
如果仍然乱码怎么办
如果上面的测试都通过了,但某些地方仍然显示乱码,可以继续检查下面几项。
1. 检查 Windows Terminal 字体
如果字体不支持中文,中文可能会显示成方块、问号或异常字符。
可以在 Windows Terminal 中打开:
| |
推荐使用支持中文的字体,例如:
- Microsoft YaHei UI
- Microsoft YaHei
- SimSun
- Sarasa Mono SC
- Noto Sans Mono CJK SC
2. 检查具体程序的编码
如果只有某些程序乱码,例如 Python、Git、npm、旧版 exe 程序,那么问题可能不在 PowerShell,而在这些程序本身的编码设置。
例如 Git 中文文件名乱码,可以尝试:
| |
Python 可以尝试启用 UTF-8 模式:
| |
或者运行脚本时使用:
| |
3. 优先使用新版 PowerShell
Windows 自带的 Windows PowerShell 5.1 对 UTF-8 的支持不如新版 PowerShell 7。
可以通过下面命令查看版本:
| |
如果是 Windows PowerShell 5.1,建议安装 PowerShell 7 后再使用。
总结
Windows PowerShell 中文乱码通常可以通过设置 UTF-8 编码解决。
推荐在 $PROFILE 中加入:
| |
然后重新打开 PowerShell,并使用下面命令确认:
| |
只要代码页和编码都显示为 65001,并且中文可以正常输出,就说明配置已经成功。