【发布时间】:2016-11-14 19:17:24
【问题描述】:
我正在尝试设置 GUI 元素的标签以使用 Python 显示希腊字母。
str(u'\u0054'.encode('utf8'))
将正确生成 unicode 字符“T”,因为它的 unicode 编号是 0054。
写作
str(u'\u03B6'.encode('utf8'))
不会显示希腊字母 small zeta 而是显示 this 的东西。
我试着写
str(u'\uceb6'.encode('utf8')) 也是(ceb6 是我想要的字符的 utf-8 编码),但是得到了一个类似的、看起来很奇怪的字符,肯定不是希腊字母 zeta。
根据this 网站,该字符可用于常用字体。
可能是 GUI 工具包使用了一种奇怪的字体?我正在使用 FOX 工具包。
感谢任何帮助。
编辑:
我特别想创建一个文本标签FXLabel(parent, string),我在其中提供字符串str(u'\u03B6'.encode('utf8'))。如前所述,为字符串提供大写字母 t 的 unicode 数字将产生预期的标签。
【问题讨论】:
-
字符
T,编码为 UTF8 字符串,如下所示:T。但是,字符ζ作为UTF8字符串是这样的:ζ,即任意代码页中的字符0xCE和0xB6(这个是Latin-1)。这就是你得到的,所以问题不在于编码,而在于你的库所期望的。 -
.. 顺便说一句,您的报价“适用于大多数字体”与实际所说的相差甚远:“支持所有常见字体”。该评论下的“通用字体”是所谓的“网络安全字体”,“可能存在于各种计算机系统上”(en.wikipedia.org/wiki/Web_typography#Web-safe_fonts)。除非您没有很多字体,否则这是“大多数字体”的非常小子集。
-
@RadLexus 谢谢,所以我应该在 Latin-1 中找到我想要的字符对应的数字?我只是觉得奇怪的是,它将 T 的编码解释为单个字符,而在第二种情况下,它将它分成两部分。哦,我编辑了我的问题:)
-
@RadLexus 我发现 this 链接显示了 latin-1 本地化的代码。没有多少。我可以以某种方式指定在任意代码页中查找 Unicode 数字而不是数字吗?
-
您可能需要重新了解“UTF8”的实际含义。在 Python(以及其他编程语言)中,
character不能保存任何任意值,但通常限制在0到255的范围内。 “UTF8”是一种规避这一点并存储更多代码点的方法;它必须通过使用多个字符来做到这一点。
标签: python unicode utf-8 fonts