首页 > 解决方案 > 向空闲/终端显示表情符号字符的方法?UnicodeEncodeError - Tk 中不支持非 BMP 字符

问题描述

我正在尝试打印此示例代码

print ("Hello \U0001F914")

现在,如果我在 MacOS 终端上运行此代码,它会打印带有思考的表情符号,如果我在 linux 终端上运行它,它与替代表情符号的效果相同。当我尝试在 IDLE 上运行它时,我遇到了这个错误:

Traceback (most recent call last):
  File "<pyshell#0>", line 1, in <module>
    print ("Hello \U0001F914")
UnicodeEncodeError: 'UCS-2' codec can't encode characters in position 6-6: Non-BMP character not supported in Tk

有没有办法让它在可以处理表情符号的解释器和不能显示表情符号的解释器上打印,只需用某些东西替换它或根本不显示它而不会崩溃?

我现在的想法是使用操作系统库并可能获取有关用户正在运行的内容的信息,然后相应地更改执行的编码。

如果有人能提出解决方案,将不胜感激!谢谢

标签: pythonunicodecharasciiemoji

解决方案


这在通常情况下是不可能的——而且需要一项非常非凡的壮举才能真正可行。

事实很简单,支持 tkinter 的技术栈 TCL 没有做 BMP 之外的 Unicode,即任何 odepoint 大于 0xffff 的字符。

唯一的解决方法是重写所有 TCL 部分以支持它,或者添加一层代码来拦截传递给某些文本处理方法的所有字符串,并用预渲染的内联替换这些字符图像(并将其正确放置在文本流中需要一些工作 - 我什至不确定是否可以在 tknter 中有一个内联图像)。

因此,如果您需要在使用 Python 创建的 GUI 中使用这些字符,则可以使用 Qt 或 GTK 作为 GUI;


推荐阅读