Python Kivy编码日语(Unicode)

Python Kivy编码日语(Unicode),python,unicode,character-encoding,kivy,Python,Unicode,Character Encoding,Kivy,我正在尝试在我的应用程序中使用日语字符。从文档和其他来源中,我找到了这个标签(text=u'我是中文', font_name='font/ARIALUNI.TTF')应该可以使用(ARIALUNI字体应该能够处理日文/中文字符)。但是我想知道如何在.kv文件中用Kivy语言指定它?这就是我所尝试的: main.py: from kivy.app import App from kivy.uix.boxlayout import BoxLayout class Design1(BoxLayou

我正在尝试在我的应用程序中使用日语字符。从文档和其他来源中,我找到了这个标签(text=u'我是中文', font_name='font/ARIALUNI.TTF')应该可以使用(ARIALUNI字体应该能够处理日文/中文字符)。但是我想知道如何在.kv文件中用Kivy语言指定它?这就是我所尝试的:

main.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'
:
方向:“垂直”
标签:
字体名称:“data/fonts/ARIALUNI.TTF”
文本:u'速 dsf'
然而,这给了我“Y欧元dsf”。阿尔索 正文:'速 没有u的dsf不起作用


p、 美国加入あい (假名)到文本:文本:'速 dsf あい' 给出更多错误:UnicodeDecodeError:“charmap”编解码器无法解码第369位的字节0x81:字符映射到,如果要使用日文字符,请下载此:

指定
.fft
文件的完整路径:

<Design1>:
    orientation: "vertical"
    Label:
        font_name:"/path/to/DroidSansJapanese.ttf"
        text: '速'
:
方向:“垂直”
标签:
字体名称:“/path/to/droidansjapanese.ttf”
正文:'速'

我还没有测试,因为今天的更新在kivy中搞砸了一些东西,但它应该可以工作。

确保您的kv文件使用utf-8字符编码,并且应该可以正常工作。大多数体面的文本编辑器将允许您选择编码

不要使用
u'
,因为文件已经是unicode(尝试使用
u'
将导致解码错误)

我对arialuni字体有问题(没有显示汉字,但它显示假名,上半部分被切掉了所有字符,包括西方字母)。所以我改用了另一种字体(TakaoPMincho,在Ubuntu中很容易安装)

kanjitest.kv:

<TestWidget>:
    Label:
        text: '速 dsf あい'
        font_name: 'TakaoPMincho.ttf'
        font_size: sp(48)
:
标签:
正文:'速 dsf あい'
字体名称:“TakaoPMincho.ttf”
字体大小:sp(48)
结果:


我对波罗的海信件也有同样的问题,并设法找到了解决办法:

使用u'\u0100'-例如,这将创建拉脱维亚字母“Ā”,因此您必须找到所有字符的unicode代码。不要问我为什么它需要双unicode声明,但对我来说,如果我使用u‘Ā’,它将在Android上工作,但在win pc上产生垃圾,但在’\u0100’的情况下,我将在win pc上有正确的字母,但在Android上产生垃圾;当双转义时,它对两个都有效。 希望这对其他人也有帮助:)因为我浪费了几个小时才弄明白:)
另外,对于日语,您可能需要使用U'\U(8char十六进制)

对于希望在.kv文件中使用其他语言的windows用户,您必须使用
utf-8
编码手动加载.kv文件。请注意,为了避免自动加载并引发解码异常,.kv文件的名称必须与应用程序的名称不同。这是因为windows假定文件是
cp1252
编码的,除非另有说明。您还必须使用支持试图显示的字符的字体。我在用美丽欧说日语。例如:

main.py

#! /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()
日本千伏

#:kivy 1.10.0

<JapaneseTest>:
    Label:
        size: self.texture_size
        font_size: 36
        font_name: "meiryo.ttc"
        text: "こんにちは!"
#:kivy 1.10.0
:
标签:
大小:self.texture\u大小
字体大小:36
字体名称:“meiryo.ttc”
文本:“こんにちは!"

当然,请确保.kv文件是以您指定的编码编写的。大多数体面的文本编辑器应该允许您更改此编码。

完整假名(平假名)错误:回溯(最近一次调用):文件“D:\Apps\KanjiLayout\main.py”,第16行,KanjiLayoutApp().run()文件”D:\Apps\u Kivy-1.8.0-py3.3-win32\Kivy\Kivy\app.py”,第765行,运行self.load\u-kv(文件名=self.kv\u文件)文件“D:\Apps\u Kivy-1.8.0-py3.3-win32\Kivy\Kivy\app.py”,第585行,在load\u-kv root=Builder.load\u文件(文件名)文件“D:\Apps\u-Kivy-1.8.0-py3-win32\Kivy\Kivy\Kivy\Kivy\app\lang.py”中,第1433行,在load\u文件中读取数据”D:\Apps\u Kivy-1.8.0-py3.3-win32\Python33\lib\encodings\cp1252.py”,第23行,在decode中,可以尝试“text:u”\u9FXX dsf或任何代码点,而不是文字字符return codecs.charmap\u decode(输入、自错误、解码表)[0]UnicodeDecodeError:“charmap”编解码器无法解码第369位的字节0x81:例如,字符映射到文本:“\u4E5D”似乎可以工作,感谢Joran Beasley,但是在kivy/examples/widgets/unicode_textinput.py中,它可以转换字符串。但是我有点搞不清楚代码的哪一部分可以实现这一点。所以我不知道ped以获得更清晰的解释。您需要在kv文件的顶部定义编码,将行
#encoding:utf-8
作为脚本的第一行(至少我认为这是行,它假设您使用的是utf8编码)(我不完全确定kivy是否支持编码指令)谢谢!所以问题在于文件是如何保存的。我用Builder.load#u string在.py文件中运行它,但是转换.kv仍然会出现问题:>>1:ï?:ï\u20ac\u20ackivy 1.8.0 2:#:导入utils kivy 3:#:导入os操作系统…声明后无效数据。我在睡眠后试图解决这个问题:pOk我做了一些更多的测试。如果我键入txt=,我也能让它工作。”速 dsf あい“在.py文件和.kv文件中:text=root.txt。但是更改.kv文件的编码会破坏它…您是如何在.kv文件中执行此操作的?请尝试使用;它将显示文件的当前编码并允许您更改它(另外,它是Windows最好的文本编辑器之一)。只要文件是UTF-8格式,它就可以正常工作。如果不是,那么这是一个与Windows相关的错误,应该是(因为它在Linux上工作)。我用记事本、记事本++和PyCharm进行了尝试。所有3个都有同样的问题,事实上我现在使用Windows和Python 3.3。我很快会用Linux和2.7进行尝试。