0

在 Tkinter 应用程序堆栈中,问号(“?”)代替了文本小部件中的 Unicode 键盘输入?

可能的位置:Python、Tkinter、TCL/TK、Windows、Windows 键盘

我在这里有一个类似的问题: 当我使用 Windows 键盘键入非 ASCII 字符时,我得到“?”

但是这个问题是要问“这个问题发生在哪里(在应用程序堆栈中)?” 所以,也许它可以阐明类似的问题,比如我之前提交的问题。

我的环境是:

4

1 回答 1

1

问题是,在某些时候,使用不支持该特定字符的编码将 unicode 符号转换为特定的字节序列(这会导致您获得“替换字符”,而这恰好是a?用于此特定转换)。

Tk 的核心是 Unicode 感知的,至少脚本的初始阶段将使用 UTF-8;该角色(嗯,几乎可以肯定)正确地从键盘和 Windows 中通过。然后发生的是字符被传送到 Python 层;我不太了解 Tkinter 的那部分,但我怀疑问题出在哪里(例如,如果生成了错误类型的字符串)。换句话说,它闻起来可能是一个微妙的 Tkinter 错误。(相比之下,Tcl 的内部字符串概念完全是 Unicode 感知的,我在我的代码中相当依赖它并且已经做了很多年。这肯定有一些权衡,我知道 Python 在这些权衡中的选择 -关闭是不同的。)

您可以通过查看您拥有的确切类型的字符串来进一步检查。它应该是一个 Unicode 字符串,否则您将永远遇到此类问题(某些平台和部署本身必须处理远远超过 256 个字符)。

于 2013-05-22T09:23:41.580 回答