【问题标题】:Label's text not showing 'á' (hungarian) letter标签的文本未显示“á”(匈牙利语)字母
【发布时间】:2019-08-13 19:21:22
【问题描述】:

我想在 kivy 应用程序中显示匈牙利语字母,但每当我使用 éáö 或其他一些字母时,它都会像这样显示 (é -> é)( á -> á) (ö -> ö)

示例:

ButtonF:
    id: beallit
    pos_hint: {'x': .375, 'y': .27}
    text: "Beállitások"

现在这个按钮的文本显示为:Beállitások

我尝试将字体更改为支持匈牙利字母的字体,即使文本的字体更改了字母仍然没有显示。

示例:

ButtonF:
    id: beallit
    pos_hint: {'x':.375, 'y': .27}
    text: "Beállitások"
    font_name: 'OpenSans'
    on_release: app.root.ids.sm.current  = 'screen5'

这里 Button's 文本是 OpenSans 字体,但它仍然不显示匈牙利字母:Beállitások

但是当我从 python 代码而不是 kivy 规则编写按钮的文本时,包含匈牙利字母的文本会正确显示。

在py中:

beallit_text = StringProperty()
beallit_text = 'Beállitások'

千伏:

ButtonF:
    id: beallit
    pos_hint: {'x':.375, 'y': .27}
    text: root.beallit_text
    font_name: 'OpenSans'
    on_release: app.root.ids.sm.current  = 'screen5'

现在我可以更改 py 代码中的所有 Label's/Button's 文本,但它们太多了。 有没有更简单的方法?

【问题讨论】:

标签: python kivy


【解决方案1】:

显然这是 Kivy 中使用非 UTF-8 编码(例如 chcp 1252)的常见编码问题。一种方法是只找到文本的编码版本。例如,你可以做什么来代替这个

ButtonF:
    text: 'Título'

是在字面上使用它的 UTF-8 编码版本。

ButtonF:
    text: str(b'T\xc3\xadtulo'.decode())

对于您的情况,á -> \xc3\xa1 (in UTF-8 literal)。您可以查看整个列表here

或者,您可以简单地识别所使用的编码。确保您的.kv 文件保存在UTF-8

from kivy.lang import Builder
with open('MyApp.renamed.kv', encoding='utf8') as f: 
    Builder.load_string(f.read())

this 指出了答案。

【讨论】:

  • 只使用UTF-8 文件可能更可持续。
  • 一般来说,在不提供encoding 参数的情况下使用open() 文本文件是不明智的。没有隐藏的魔法可以为您识别编码,您必须明确说明它。如果您忽略指定编码并且它仍然有效,那仅意味着您很幸运 - 不同机器上的其他人使用不同的默认值会遇到错误。
猜你喜欢
  • 2011-11-22
  • 2011-10-20
  • 1970-01-01
  • 1970-01-01
  • 2012-05-21
  • 2012-09-09
  • 2017-02-12
  • 1970-01-01
  • 2017-03-09
相关资源
最近更新 更多