python - 向空闲/终端显示表情符号字符的方法?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
有没有办法让它在可以处理表情符号的解释器和不能显示表情符号的解释器上打印,只需用某些东西替换它或根本不显示它而不会崩溃?
我现在的想法是使用操作系统库并可能获取有关用户正在运行的内容的信息,然后相应地更改执行的编码。
如果有人能提出解决方案,将不胜感激!谢谢
解决方案
这在通常情况下是不可能的——而且需要一项非常非凡的壮举才能真正可行。
事实很简单,支持 tkinter 的技术栈 TCL 没有做 BMP 之外的 Unicode,即任何 odepoint 大于 0xffff 的字符。
唯一的解决方法是重写所有 TCL 部分以支持它,或者添加一层代码来拦截传递给某些文本处理方法的所有字符串,并用预渲染的内联替换这些字符图像(并将其正确放置在文本流中需要一些工作 - 我什至不确定是否可以在 tknter 中有一个内联图像)。
因此,如果您需要在使用 Python 创建的 GUI 中使用这些字符,则可以使用 Qt 或 GTK 作为 GUI;
推荐阅读
- c++ - 如何将 WM_GESTURE 消息转发/处理到不同的窗口
- c# - 将动态 json 对象反序列化为类
- c - 从 C 转换为 Racket 方案
- maintenance-mode - 目标组中没有健康实例时的维护页面
- arrays - 为什么变量的值在程序中改变而不改变?
- php - 我想将记录从 SQL 导入 Excel
- mysql - 选择具有回退空记录的行
- javascript - 有没有办法让我的 JavaScript 文件不在 html 页面中运行?
- bash - 使用转义字符在 shell 中组合命令?
- odoo - 如何在 Odoo 组(角色)选择中使用选择字段(下拉菜单)而不是复选框?