将表情符号字符显示到IDLE /终端的方法? UnicodeEncodeError-Tk中不支持非BMP字符

时间:2019-10-28 23:04:02

标签: python unicode char ascii emoji

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

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

是否有一种方法可以让它在可以处理表情符号的解释器上和不能显示表情符号的解释器上打印,只需将其替换为某些东西或完全不显示它而不会崩溃?

我现在的想法是使用OS库并可能获取有关用户正在运行什么的信息,然后相应地更改执行的代码。

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

1 个答案:

答案 0 :(得分:0)

这通常是不可能的-并且需要太特殊的专长才能切实可行。

事实很简单,支持tkinter的技术栈TCL不会在BMP之外执行Unicode,即odepoint大于0xffff的任何字符。

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

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