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

为什么会出现这种情况?简单来讲:
It does not make sense to have a string without knowing what encoding it uses. link
一个字符串如果不知道它用的编码,将毫无意义。
Joel Spolsky
换言之,命令行之所以出现乱码,都是因为编码不对。Windows 命令行的编码,默认都是 UCS-2(即 UTF-16,以前是 Java 和 JavaScript 中默认编码),这在二十年前,是相当常见的编码,基本上不会存在什么问题。但随着互联网的流行,UTF-8 编码变得越来越流行,使用 UTF-8 编码存储的文件也越来越普遍,这就有冲突了。如果感兴趣,可以看看本篇的 参考链接。
那如何解决命令行中显示非 ASCII 字符的问题呢?
按照网上说法,如果你使用的是默认命令行 (cmd.exe),那么可以使用 chcp 命令来设置编码,比如:
1 | chcp 65001 |
或者你可以在 .bat 文件第一行使用该命令来设置编码。

貌似不行啊… 😕
如果你使用的是 PowerShell,那需要使用 -Encoding 参数,指定编码格式。
1 | $PSDefaultParameterValues['*:Encoding'] = 'utf8' |

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


参考链接
- Windows Command-Line: Backgrounder
- Using non-ASCII characters in a cmd batch file
- Set Windows PowerShell to UTF-8 Encoding to Fix GBK Codec Can Not Encode Character Error – PowerShell Tutorial
- Add emoji support to Windows Console
本文链接:
content_copy https://zxs66.github.io/2022/03/04/display-non-ASCII-characters-in-Windows-command-and-PowerShell/