如果我在 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 也没有帮助。从
just_fix_windows_console
导入 colorama
并在打印之前运行它也没有帮助 - 尽管它修复了打印 ANSI 转义序列的能力。
CMD.EXE 窗口和终端中的命令窗口使用相同的字体 -
Consolas
。
在 CMD.EXE 窗口中显示表情符号根本不可能,还是我错过了一些我不知道的技巧?
问题不在于
cmd.exe
,它只是使用正在使用的任何编码将字节字符串输出到正在运行的终端。
因此,如果您在命令提示符下运行 Python,并将其转到
print("\U0001F600")
,该字符将被发送到终端。
但是,您在以前版本的 Windows 上运行命令提示符时始终打开的默认 Windows 控制台主机默认情况下不支持 UTF-8 字符,它使用另一种编码。所以,你最终会看到这个:
但是,在 Windows 11 上,新的 Windows 终端是默认设置,并且它确实完全支持并默认使用 UTF-8。如果您使用 Windows 终端运行命令提示符,您会得到以下信息:
命令解释器(实际的 CLI 应用程序)和它运行的终端很容易混淆,以显示命令解释器的输入和输出流发生了什么。
PowerShell 和命令提示符是命令解释器。 Windows 控制台主机和 Windows 终端是终端。后者的选择限制了可以渲染的内容。前者都支持多种编码。
请注意,您还可以在 Windows 10 上下载并安装 Windows 终端 - 这不是默认设置。
注意:您询问是否有什么可以做的。您可以并且这个问题进入那个,但也要注意,这是不推荐并且对其他应用程序有深远的影响。您绝对不想强迫 Python 脚本的其他用户也必须这样做。 Windows 终端将继续存在,因此将其用作新的默认终端是更好的选择。