【问题标题】:Kivy isn't showing (Bengali) Unicode character properlyKivy 未正确显示(孟加拉语)Unicode 字符
【发布时间】:2020-12-25 22:32:23
【问题描述】:

目前我正在开发 Kivy 桌面应用程序,但在尝试在应用程序的标签和按钮文本中以孟加拉语显示 unicode 字符时遇到问题。每次我得到如下图所示的输出。我尝试了不同的字体,例如 SolaimanLipi.ttf、kalpurush.ttf、NikoshBAN.ttf,但仍然没有运气。我正在使用 Windows PC。相同字体的相同文本在 Kivy 之外正确显示;它在所有文本编辑器中都能正常工作,并确保我也在 Java Swing 桌面应用程序中进行了测试。

谁能描述一下是什么问题?我能做些什么来解决它?

预期输出:

程序输出:

        #-- coding: utf-8 --

        from kivy.base import runTouchApp
        from kivy.lang import Builder

        runTouchApp(Builder.load_string("""
        #:import sp kivy.metrics.sp
        Label:
            text: 'সকালে'
            font_size: sp(50)
            font_name: "SolaimanLipi.ttf"    
        """))

【问题讨论】:

  • 所以问题是最后两个字母被交换了,对吗?
  • 或者更准确地说:它们以严格的从左到右的顺序显示。到字符串中代码点的顺序,根据正字法规则,这不是正确的位置,对吧?可能kivy的排版算法不够花哨……
  • 不,取决于 unicode 字符。
  • 可能你对排版算法是正确的,但是现在我该如何解决这个问题?这个问题是关于字体还是 kivy 无法呈现 unicode
  • 相同的渲染规则是否适用于使用梵文脚本的其他语言? IE。是否出现相同的字形组合,例如在印地语中,如果是这样,它是否在该语言中呈现相同? (如果你能说出字形的名字,并解释渲染是如何错误的,这将对我们西方文盲有所帮助。)

标签: python unicode kivy bengali


【解决方案1】:

Kivy 中存在一个自 2014 年以来一直开放的错误 (!) - https://github.com/kivy/kivy/issues/2669

在我能理解讨论和当前状态的情况下,开发者仍在寻找解决方案。

泰米尔语等语言需要重塑,我们当前的提供商不支持这一过程。我正在开发一个新的文本提供程序,使用 Pango 作为在 Linux(可能还有 OSX)上提供这种支持的选项。

-- kived in 2014

这(从 2017 年开始)似乎也相关,但也隐约陈旧:https://github.com/kivy/kivy/issues/4902

【讨论】:

  • 自 2014 年以来仍然没有解决方案??? kivy 默认使用 Pango 后端对吗??
  • 我对 Kivy 不够熟悉,无法判断您是否可以通过某种方式解决这个问题。看起来他们仍然没有使用 Pango,但我可能是错的。据我了解,您必须重新编译或以其他方式重新组装 Kivy 本身才能使用 Pango。第二个错误报告中的补丁可能不再可以直接应用,但至少应该让您大致了解一下。
【解决方案2】:

Unicode 文本可以转换为 Bijoy (ANSI) 文本,并且可以通过使用 [font] 标签在 Kivy 中轻松使用,如下所示:

text = "[font=font/SutonnyMJ]Avwg evsjvq K_v ewj[/font] means I speak Bangla"

This repo 提供与 Kivy 中的 Unicode 到 Bijoy (ANSI) 转换相关的代码和指令。不是一个完美的解决方案,但大多数应用都能满足他们的需求。

【讨论】:

    猜你喜欢
    • 2011-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多