2016-06-19 12 views
1

Ich versuche derzeit, Text lesen von einer Datei auf dem Bildschirm mit Pygame. Wenn ich jedoch versuche, ein nicht standardisiertes Unicode-Zeichen (d. H. Japanisches Hirigana) zu rendern, antwortet es nur mit einer Auswahl zufälliger Zeichen und Kästchen. Ich habe alles durchsucht, was ich finden konnte und nichts funktioniert. Irgendwelche Ideen? Die Datei wird ordnungsgemäß in UTF-8 codiert und gelesen, so dass das Problem während der Rendering-Phase auftritt.Rendern Unicode-Schriftart mit Pygame

Mein Text-Rendering-Code:

def text(screen, pos, text='', font=None, color=BLACK, halign='LEFT', valign='TOP'): 
    if font == None: font = pygame.font.Font(None,16) 
    draw = font.render(text.encode('utf8'), True, color) 
    pos = list(pos) 

    if halign.upper() == 'CENTER': pos[0] -= font.size(text)[0]/2 
    if halign.upper() == 'RIGHT': pos[0] -= font.size(text)[0] 

    if valign.upper() == 'CENTER': pos[1] -= font.size(text)[1]/2 
    if valign.upper() == 'BOTTOM': pos[1] -= font.size(text)[1] 

    screen.blit(draw, pos) 

Der Text Ich versuche zu machen:

おはようございます、みんな! 

Das Ergebnis: http://imgur.com/VDctx8N

EDIT: Nach einigen Tests, es stellt sich heraus, dass es die Schriftart war, die ich benutzte ... Entspricht jemand in dieser Hinsicht einer Alternative zu Segoe UI Light, die Kana unterstützt?

+1

Ich denke, der Text nicht codiert werden soll. 'encode()' erzeugt Binärdaten, die zum Speichern und nicht zum Rendern geeignet sind. –

+0

Ich habe das gleiche Problem, mit oder ohne die 'encode()' ... Ich habe keine Ahnung, was los ist (obwohl das Entfernen das Ergebnis zu [this] ändert (http://imgur.com/1YKCU4B)) – tripl3dogdare

+0

Jetzt passt zumindest die Anzahl der Zeichen. Es sieht so aus, als ob die Schriftart Unicode oder Unicode-Block nicht unterstützt. –

Antwort

0

auf Debian, ist es verfügbar setofont (fonts-seto)

 

    font_file = pygame.font.match_font("setofont") # Select and 
    font = pygame.font.Font(font_file, 30)   # open the font 
    writing = font.render(u"おはようございます、みんな!", True, (0, 0, 0)) 

screenshot