2014-06-09 5 views
1

Я пытаюсь получить японские символы в своем приложении. Из документации и других источников я обнаружил, что Label (text = u '我 是 中文', font_name = 'fonts/ARIALUNI.TTF') должен работать (шрифт arialuni должен иметь возможность обрабатывать японские/китайские символы). Однако мне интересно, как это указать на языке Kivy в .kv-файле? Это то, что я пробовал:Kivy Encoding Japanese (Unicode)

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' 

Однако это дает мне "ушного € Y DSF". Также текст: «速 dsf» без u не работает.

p.s. добавление あ い (кана) к тексту: текст: '速 DSF あ い' дает еще больше ошибок: UnicodeDecodeError: 'CharMap' кодек не может декодировать байт 0x81 в позиции 369: символ сопоставляется < Undefined>

+0

Полный кана (хирагана) Ошибка: Traceback (самый последний вызов последнего): Файл . "D: \ Apps \ KanjiLayout \ main.py", строка 16, в KanjiLayoutApp() запустить() File " D: \ Apps \ _Kivy-1.8.0-py3.3-win32 \ kivy \ kivy \ app.py ", строка 765, в запуске self.load_kv (filename = self.kv_file) Файл" D: \ Apps \ _Kivy-1.8.0-py3.3-win32 \ kivy \ kivy \ app.py ", строка 585, в load_kv root = Builder.load_file (rfilename) Файл" D: \ Apps \ _Kivy-1.8.0- py3.3-win32 \ kivy \ kivy \ lang.py ", строка 1433, в load_file data = fd.read() Файл" D: \ Apps \ _Kivy-1.8.0-py3.3-win32 \ Python33 \ Lib \ кодирование s \ cp1252.py ", строка 23, в декоде – NumesSanguis

+0

, может быть, попробуйте' text: u '\ u9FXX dsf' или что бы то ни было, а не буква символа –

+0

return codecs.charmap_decode (input, self.errors, decoding_table) [0] UnicodeDecodeError: кодек 'charmap' не может декодировать байт 0x81 в позиции 369: символьные карты на < undefined> – NumesSanguis

ответ

2

Убедитесь, что ваш файл kv использует кодировку символов utf-8, и она должна работать нормально. Большинство достойных текстовых редакторов позволят вам выбрать кодировку.

Не используйте u'', так как файл уже unicode (попытка использования u'' приведет к ошибкам декодирования).

У меня были проблемы с шрифтом arialuni (не показывал кандзи, но он показывал кана, а верхняя половина была отрезана от всех персонажей, включая западные буквы). Поэтому вместо этого я использовал другой шрифт (TakaoPMincho - прост в установке в Ubuntu).

kanjitest.kv:

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

Результат:

enter image description here

+0

Спасибо! Поэтому проблема заключалась в том, как файл был сохранен. я получил это работает в .py файл с Builder.load_string, однако преобразование .kv все еще дает проблемы: >> 1: ï »¿#: ã \ u20ac \ u20ackivy 1.8.0 2: #: импорт Utils kivy 3: #: import os os ... Недействительные данные после объявления. Я пытаюсь понять это после некоторого сна: p – NumesSanguis

+0

Хорошо, я сделал еще несколько тестов. Я также получил его работу, если я набираю txt = "速 dsf あ い" в .py-файле и в .kv-файле: text = root.txt. Однако изменение кодировки файла .kv нарушает его ... Как вы это сделали в .kv-файле? – NumesSanguis

+0

Попробуйте использовать [Notepad ++] (http://notepad-plus-plus.org/); он покажет вам текущую кодировку файла и позволит вам ее изменить (плюс это один из лучших текстовых редакторов для Windows). Пока файл находится в UTF-8, он должен работать нормально. Если это не так, то это ошибка, связанная с Windows, которая должна быть сообщена Kivy (https://github.com/kivy/kivy/issues) (поскольку она работает в Linux). –

0

Если вы хотите использовать японские символы, скачать этот fft:

Укажите полный путь к файлу .fft:

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

Я не проверял как обновление сегодня облажались что-то в kivy, но он должен работать.

0

У меня была такая же проблема с Прибалтийских писем и удалось найти решение:

использование U '\ U0100' - это, например, создаст латышскую букву «Ā», поэтому вам нужно найти коды Юникода для всех ваших символов. Не спрашивайте меня, почему для этого требуется двойная декларация Юникода, но для меня, если я использую u''''''''''''''''''''''''''''''''` '' 'на Android, но сделайте ерунду на win pc, но в случае' \ u0100 'у меня будет правильное письмо на win pc но дерьмо на Android; когда двойной сбежал, он работает на обоих. Надеюсь, это тоже поможет кому-то :) Потому что я потратил несколько часов на то, чтобы понять это: PS. для японцев вам может понадобиться использовать U '\ U (8char hex)'

0

Для пользователей Windows, которые хотят иметь свой другой язык в .kv-файле, вы должны вручную загрузить файл .kv с использованием кодировки utf-8. Обратите внимание, что во избежание его автоматической загрузки и исключения исключения декодирования в любом случае .kv-файл должен быть назван иначе, чем ваше приложение. Это связано с тем, что окна предполагают, что файл равен cp1252, если не указано иное.Вы также должны использовать шрифт, который поддерживает символы, которые вы пытаетесь отобразить. Я использую Meiryo для японцев. Так, например:

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() 

Japanese.kv

#:kivy 1.10.0 

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

Конечно, убедитесь, что файл .kv записывается в кодировке, которую вы указали. Большинство достойных текстовых редакторов должны позволить вам изменить это.