簡體   English   中英

Kivy 編碼日語 (Unicode)

[英]Kivy Encoding Japanese (Unicode)

我正在嘗試在我的應用程序中獲取日語字符。 從文檔和其他來源我發現 Label(text=u'我是中文', font_name='fonts/ARIALUNI.TTF') 應該可以工作(arialuni字體應該能夠處理日文/中文字符)。 但是我想知道如何在 .kv 文件中的 Kivy 語言中指定它? 這是我嘗試過的:

主要.py:

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout


class Design1(BoxLayout):
    pass


class KanjiLayoutApp(App):
    def build(self):
        return Design1()


if __name__ == '__main__':
    KanjiLayoutApp().run()

kanjilayout.kv:

<Design1>:
    orientation: "vertical"
    Label:
        font_name: 'data/fonts/ARIALUNI.TTF'
        text: u'速 dsf'

然而,這給了我“é€Y dsf”。 還有文字:沒有你的'速dsf'不起作用。

ps 在文本中添加 あい(假名): text: '速 dsf あい' 給出更多錯誤: UnicodeDecodeError: 'charmap' codec can't decode byte 0x81 in position 369: character maps to < undefined>

確保您的 kv 文件使用 utf-8 字符編碼,它應該可以正常工作。 大多數體面的文本編輯器將允許您選擇編碼。

不要使用u'' ,因為文件已經是 unicode (嘗試使用u''將導致解碼錯誤)。

我在使用 arialuni 字體時遇到了問題(沒有顯示漢字,但確實顯示了假名,而且上半部分的所有字符都被剪掉了,包括西方字母)。 所以我改用了不同的字體(TakaoPMincho - 易於在 Ubuntu 中安裝)。

漢字測試.kv:

<TestWidget>:
    Label:
        text: '速 dsf あい'
        font_name: 'TakaoPMincho.ttf'
        font_size: sp(48)

結果:

在此處輸入圖片說明

對於希望在 .kv 文件中使用其他語言的 Windows 用戶,您必須使用utf-8編碼手動加載 .kv 文件。 請注意,為了避免自動加載並拋出解碼異常,.kv 文件的名稱必須與您的應用程序不同。 這是因為 Windows 假定文件是cp1252編碼的,除非另有說明。 您還必須使用支持您嘗試顯示的字符的字體。 我在日語中使用 Meiryo。 例如:

主文件

#! /usr/bin/env python3

from kivy.app import App
from kivy.uix.widget import Widget
from kivy.lang import Builder

#These two lines are what opens the .kv file and uses the rules written within.
with open("Japanese.kv", encoding='utf-8') as f: # Note the name of the .kv 
                                                 # doesn't match the name of the App
    Builder.load_string(f.read())

class JapaneseTest(Widget):
    pass

class JapaneseTestApp(App):
    def build(self):
        return JapaneseTest()

if __name__ == '__main__':
    JapaneseTestApp().run()

日語.kv

#:kivy 1.10.0

<JapaneseTest>:
    Label:
        size: self.texture_size
        font_size: 36
        font_name: "meiryo.ttc"
        text: "こんにちは!"

當然,請確保 .kv 文件是以您指定的編碼編寫的。 大多數體面的文本編輯器應該允許您更改此設置。

如果要使用日語字符,請下載此ttf

指定.ttf文件的完整路徑:

<Design1>:
    orientation: "vertical"
    Label:
        font_name:"/path/to/DroidSansJapanese.ttf"
        text: '速'
        

我還沒有測試,因為今天的更新在 kivy 中搞砸了一些東西,但它應該可以工作。

我對波羅的海信件有同樣的問題並設法找到解決方案:

使用 u'\Ā' - 例如,這將創建拉脫維亞字母“Ā”,因此您必須為所有字符找到 unicode 代碼。 不要問我為什么它需要雙重 unicode 聲明,但對我來說,如果我使用 u'Ā' 它可以在 Android 上運行,但在 win pc 上會產生廢話,但是在 '\Ā' 的情況下,我在 win pc 上會有正確的字母但在Android上廢話; 當雙重轉義時,它對兩者都有效。 希望這對其他人也有幫助:) 因為我浪費了幾個小時才弄清楚:) PS。 對於日語,您可能需要使用 U'\\U(8char hex)'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM