在CMD.EXE窗口用Python输出表情符号可行吗?

0 投票
1 回答
45 浏览
提问于 2025-04-14 16:44

如果我在Windows终端中打开一个命令窗口标签,下面这几种方法都能正常工作:

print("\U0001F600")
print("\N{grinning face}")
from emoji import emojize
print(emojize(":grinning_face:"))
from rich import print as rich_print
rich_print(":grinning_face:")

但是,如果我通过按Win+R然后输入CMD.EXE来打开命令窗口,这些方法就不管用了——每次都会显示一个方框里的问号。把代码页改成65001也没用。即使从colorama中导入just_fix_windows_console并在打印之前运行它,也没有帮助——虽然它能解决打印ANSI转义序列的问题。

CMD.EXE窗口和终端中的命令窗口使用的是同一种字体——Consolas

在CMD.EXE窗口中显示表情符号到底是不可能,还是我漏掉了什么技巧呢?

1 个回答

2

问题不在于 cmd.exe,它只是把字节字符串输出到运行它的终端,使用的是当前的编码方式。

所以,如果你在命令提示符下运行 Python,并让它执行 print("\U0001F600"),这个字符就会被发送到终端。

不过,之前版本的 Windows 中,默认的 Windows 控制台主机在你打开命令提示符时并不支持 UTF-8 字符,它使用的是其他编码方式。因此,你可能会看到这样的结果:

一个带问号的菱形字符的图片

然而,在 Windows 11 中,新推出的 Windows Terminal 是默认的,它完全支持并默认使用 UTF-8。如果你通过 Windows Terminal 运行命令提示符,你会看到这样的结果:

在这里输入图片描述

容易混淆的是,命令解释器(实际的命令行应用)和它运行的终端,这两个东西负责显示命令解释器的输入和输出流。

PowerShell 和命令提示符都是命令解释器,而 Windows 控制台主机和 Windows Terminal 是终端。后者的选择限制了可以显示的内容,而前者都支持多种编码。

值得注意的是,你也可以在 Windows 10 上下载并安装 Windows Terminal,只是它不是默认的。

注意:你问是否有什么可以做的。你可以,这个问题有详细说明,但也要注意,这并不推荐,因为会对其他应用产生深远的影响。你肯定不想强迫其他使用你 Python 脚本的人也这样做。Windows Terminal 是未来的趋势,所以把它作为新的默认选项是更好的选择。

撰写回答