【问题标题】:Python: Certain unicode characters do not display correctlyPython:某些 unicode 字符无法正确显示
【发布时间】: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字符串是这样的:ζ,即任意代码页中的字符0xCE0xB6(这个是Latin-1)。这就是你得到的,所以问题不在于编码,而在于你的库所期望的。
  • .. 顺便说一句,您的报价“适用于大多数字体”与实际所说的相差甚远:“支持所有常见字体”。该评论下的“通用字体”是所谓的“网络安全字体”,“可能存在于各种计算机系统上”(en.wikipedia.org/wiki/Web_typography#Web-safe_fonts)。除非您没有很多字体,否则这是“大多数字体”的非常小子集。
  • @RadLexus 谢谢,所以我应该在 Latin-1 中找到我想要的字符对应的数字?我只是觉得奇怪的是,它将 T 的编码解释为单个字符,而在第二种情况下,它将它分成两部分。哦,我编辑了我的问题:)
  • @RadLexus 我发现 this 链接显示了 latin-1 本地化的代码。没有多少。我可以以某种方式指定在任意代码页中查找 Unicode 数字而不是数字吗?
  • 您可能需要重新了解“UTF8”的实际含义。在 Python(以及其他编程语言)中,character 不能保存任何任意值,但通常限制在 0255 的范围内。 “UTF8”是一种规避这一点并存储更多代码点的方法;它必须通过使用多个字符来做到这一点。

标签: python unicode utf-8 fonts


【解决方案1】:

您的输出编码错误。确保您的终端正确配置为 UTF-8 输出。

如果我正确解释了您的(相当混乱的)图像,CE B6 将显示为 Î‎¶‎ 这与许多常见的西方 8-bit encodings 中的任何一个一致。

【讨论】:

  • 是的,就是输出的字符。将我的终端配置为 UTF-8 输出是什么意思?至于您提供的链接,我不确定我在看什么。我如何知道要使用哪种本地化,以及为什么 Python 将我的 unicode 数字解释为两个字符,每个字符有两个十六进制数字,而不是一个字符,每个字符有四个十六进制数字?
  • UTF-8 将此字符编码为两个字节。您需要配置您的环境(基本上是运行 Python 的程序)以正确解释此输出。这是一个常见的常见问题解答;您应该很容易找到适用于您的环境的说明,)但是您的问题缺少详细信息来告诉您任何具体内容。
猜你喜欢
  • 2013-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多