您在这里遇到多个问题,但我不确定您遇到的问题是什么,所以我将尽力介绍所有问题。
首先,如何“字符串化”字符串?
您需要准确定义这意味着什么—您将什么输入映射到什么输出,如果
:8是输入,则意味着
80:80应该将
:8中间的字符转换为表情符号(如果不是,则表示该规则的确切含义是什么)为什么不)等
这样,实现起来就不那么困难了-
无论是循环
s.split()还是更复杂
re.finditer,您的规则是否需要考虑当前模式之外的上下文等,均取决于您选择的规则。
无论如何,PyPI上有许多库可以对此进行各种变化,并且您已经发现至少一个
emoji。所以我假设这个问题已经解决。
接下来,您在哪里将其挂接到代码中?
大概,您有一个回调,只要用户提交聊天消息,就会触发该回调。我不知道您是如何设置的,但这并不重要,所以让我们组成一个简单的示例:
def callback(widget): msg = widget.get() conn.sendall(msg) msglog.append(f'>>> {msg}')
此函数从消息输入窗口小部件中获取字符串内容,然后两者都将该字符串发送到服务器,并将其显示在消息日志窗口小部件中。因此,您所需要做的就是:
def callback(widget): msg = widget.get() msg = emojify(msg) conn.sendall(msg) msglog.append(f'>>> {msg}')
第三,您如何处理tkinter无法正确处理表情符号(和其他非BMP字符)的事实?
这部分是您链接的问题的摘要。Tkinter有一个已知的错误,直到3.7为止仍然存在,并且最著名的解决方法是丑陋的。
但是,尽管它可能 很难看 ,但并不 难
。该问题的答案与另一个问题有关,其中Martijn
Pieters提供了一个不错的
with_surrogates函数,您可以仅调用已情绪化的字符串。
如果你想要的东西简单,但哈克,这将使服务器与任何东西基本没用 ,但是 一车Tkinter的客户,你可以做到这一点发送过线的消息之前:
def callback(widget): msg = widget.get() msg = emojify(msg) tkmsg = with_surrogates(msg) conn.sendall(tkmsg) msglog.append(f'>>> {tkmsg}')
但是,更干净的解决方案是将它们作为适当的UTF-8通过网络发送,并且仅通过替代形式进行显示,都可以在这里进行:
def callback(widget): msg = widget.get() msg = emojify(msg) conn.sendall(msg) tkmsg = with_surrogates(msg) msglog.append(f'>>> {tkmsg}')
…以及接收其他用户消息的代码中:
def on_msg(msg): tkmsg = with_surrogates(msg) msglog.append(tkmsg)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)