Windows PowerShell 中文乱码的解决方法:永久启用 UTF-8

记录 Windows Terminal / PowerShell 无法正常显示中文时,通过设置 UTF-8 编码解决乱码问题的方法。

问题现象

在 Windows 的终端或 PowerShell 中,有时会遇到中文显示异常的问题,例如:

  • 中文显示为乱码;
  • 中文显示为问号;
  • 某些命令输出中文时无法正常显示;
  • Python、Git、npm 等工具在终端里输出中文异常。

这类问题通常和终端编码、PowerShell 输出编码或字体设置有关。

本文记录一种常用解决方法:让 PowerShell 默认使用 UTF-8 编码。

解决思路

PowerShell 中影响中文显示的关键点主要有三个:

  1. 当前终端代码页是否为 UTF-8;
  2. PowerShell 的输出编码是否为 UTF-8;
  3. 终端字体是否支持中文。

其中,UTF-8 对应的代码页是:

1
65001

如果 PowerShell 每次打开后都自动切换到 65001,并且输出编码也是 UTF-8,那么大多数中文乱码问题都可以解决。

永久设置 PowerShell 使用 UTF-8

打开 PowerShell,执行:

1
notepad $PROFILE

如果提示文件不存在,就选择新建。

然后在打开的配置文件中加入下面内容:

1
2
3
chcp 65001 > $null
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
$OutputEncoding = [System.Text.Encoding]::UTF8

保存文件后,关闭当前 PowerShell 窗口,并重新打开一个新的 PowerShell。

配置说明

这三行配置分别表示:

1
chcp 65001 > $null

将当前终端代码页切换为 UTF-8。
> $null 的作用是隐藏 Active code page: 65001 这类提示信息,让每次打开 PowerShell 时界面更干净。

1
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8

设置控制台输出编码为 UTF-8。

1
$OutputEncoding = [System.Text.Encoding]::UTF8

设置 PowerShell 向外部程序传递文本时使用 UTF-8 编码。

如何测试是否成功

重新打开一个新的 PowerShell 窗口后,依次执行下面命令:

1
chcp

如果输出类似下面这样:

1
Active code page: 65001

说明当前终端代码页已经是 UTF-8。

继续测试中文输出:

1
echo 中文测试

如果能够正常显示:

1
中文测试

说明终端已经可以正常显示中文。

再检查 PowerShell 的输出编码:

1
2
[Console]::OutputEncoding.CodePage
$OutputEncoding.CodePage

如果两个结果都是:

1
2
65001
65001

说明 PowerShell 的输出编码也已经设置为 UTF-8。

也可以使用下面这组命令一次性检查:

1
2
3
4
chcp
echo 中文测试
[Console]::OutputEncoding.CodePage
$OutputEncoding.CodePage

理想结果类似:

1
2
3
4
Active code page: 65001
中文测试
65001
65001

出现这个结果,就说明 UTF-8 配置已经生效。

实际测试结果示例

下面是一次成功配置后的测试结果:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
PS C:\Users\xx> chcp
Active code page: 65001

PS C:\Users\xx> echo 中文测试
中文测试

PS C:\Users\xx> [Console]::OutputEncoding.CodePage
65001

PS C:\Users\xx> $OutputEncoding.CodePage
65001

这说明:

  • 当前代码页是 UTF-8;
  • 中文可以正常输出;
  • PowerShell 控制台输出编码是 UTF-8;
  • PowerShell 的 $OutputEncoding 也是 UTF-8。

因此可以判断:配置成功。

如果仍然乱码怎么办

如果上面的测试都通过了,但某些地方仍然显示乱码,可以继续检查下面几项。

1. 检查 Windows Terminal 字体

如果字体不支持中文,中文可能会显示成方块、问号或异常字符。

可以在 Windows Terminal 中打开:

1
设置 → 配置文件 → PowerShell → 外观 → 字体

推荐使用支持中文的字体,例如:

  • Microsoft YaHei UI
  • Microsoft YaHei
  • SimSun
  • Sarasa Mono SC
  • Noto Sans Mono CJK SC

2. 检查具体程序的编码

如果只有某些程序乱码,例如 Python、Git、npm、旧版 exe 程序,那么问题可能不在 PowerShell,而在这些程序本身的编码设置。

例如 Git 中文文件名乱码,可以尝试:

1
git config --global core.quotepath false

Python 可以尝试启用 UTF-8 模式:

1
$env:PYTHONUTF8=1

或者运行脚本时使用:

1
python -X utf8 your_script.py

3. 优先使用新版 PowerShell

Windows 自带的 Windows PowerShell 5.1 对 UTF-8 的支持不如新版 PowerShell 7。

可以通过下面命令查看版本:

1
$PSVersionTable.PSVersion

如果是 Windows PowerShell 5.1,建议安装 PowerShell 7 后再使用。

总结

Windows PowerShell 中文乱码通常可以通过设置 UTF-8 编码解决。

推荐在 $PROFILE 中加入:

1
2
3
chcp 65001 > $null
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
$OutputEncoding = [System.Text.Encoding]::UTF8

然后重新打开 PowerShell,并使用下面命令确认:

1
2
3
4
chcp
echo 中文测试
[Console]::OutputEncoding.CodePage
$OutputEncoding.CodePage

只要代码页和编码都显示为 65001,并且中文可以正常输出,就说明配置已经成功。

使用 Hugo 构建
主题 StackJimmy 设计