在 Windows 命令行和 PowerShell 中显示非 ASCII 字符
2022-03-04

Windows 环境下,只要使用的足够多,相信大家一定会遇到在命令行 (cmd.exe) 和 PowerShell 中显示非 ASCII 字符(比如中日韩字符,俗称 CJK 编码)的情况。但是有时候,命令行并补能够正常所有字符,取而代之的是方块 或者问号

PowerShell 默认显示

为什么会出现这种情况?简单来讲:

It does not make sense to have a string without knowing what encoding it uses. link
一个字符串如果不知道它用的编码,将毫无意义。
Joel Spolsky

换言之,命令行之所以出现乱码,都是因为编码不对。Windows 命令行的编码,默认都是 UCS-2(即 UTF-16,以前是 JavaJavaScript 中默认编码),这在二十年前,是相当常见的编码,基本上不会存在什么问题。但随着互联网的流行,UTF-8 编码变得越来越流行,使用 UTF-8 编码存储的文件也越来越普遍,这就有冲突了。如果感兴趣,可以看看本篇的 参考链接

那如何解决命令行中显示非 ASCII 字符的问题呢?

按照网上说法,如果你使用的是默认命令行 (cmd.exe),那么可以使用 chcp 命令来设置编码,比如:

1
chcp 65001

或者你可以在 .bat 文件第一行使用该命令来设置编码。

PowerShell chcp 65001 也不行啊

貌似不行啊… 😕

如果你使用的是 PowerShell,那需要使用 -Encoding 参数,指定编码格式。

1
$PSDefaultParameterValues['*:Encoding'] = 'utf8'

PowerShell 设置编码

emmm… 还是不行… 😢

其实,还有另一种方式,那就是换个 Terminal,比如 Windows Terminal,他的默认编码就是 UTF-8 🙂。

Windows Terminal

Windows Terminal chcp 65001 能行?

参考链接

本文链接:
content_copy https://zxs66.github.io/2022/03/04/display-non-ASCII-characters-in-Windows-command-and-PowerShell/