Python 使用pygame呈现unicode字体
我目前正在尝试使用pygame将从文件读取的文本呈现到屏幕上。但是,当我尝试呈现非标准Unicode字符(即日语平假名)时,它只会以各种随机字符和框进行响应。我找遍了所有我能找到的东西,但什么也没找到。有什么想法吗?文件以UTF-8正确编码和读取,因此问题出现在渲染阶段 我的文本呈现代码:Python 使用pygame呈现unicode字体,python,unicode,pygame,Python,Unicode,Pygame,我目前正在尝试使用pygame将从文件读取的文本呈现到屏幕上。但是,当我尝试呈现非标准Unicode字符(即日语平假名)时,它只会以各种随机字符和框进行响应。我找遍了所有我能找到的东西,但什么也没找到。有什么想法吗?文件以UTF-8正确编码和读取,因此问题出现在渲染阶段 我的文本呈现代码: def text(screen, pos, text='', font=None, color=BLACK, halign='LEFT', valign='TOP'): if font == None
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)
我试图呈现的文本:
おはようございます、みんな!
结果是:
编辑:经过一些测试,结果证明这是我使用的字体。。。在这些方面,有人知道有没有一种支持假名的Segoe UI Light替代品吗?在Debian上,可以使用setofont字体seto
我想文本不应该被编码。encode创建适合存储的二进制数据,而不是用于渲染。我有同样的问题,无论是否使用“encode”。。。我不知道发生了什么,虽然删除它确实会改变结果,至少现在的字符数适合。该字体似乎不支持Unicode或该Unicode块。同样,已选中。字体确实支持精确的字符。。。我被难住了。draw=font.render'おはようございます、みんな!', 正确,颜色编号编码为@KlausD。我已经说过了。From font.render reference:接受Unicode和字符字节字符串 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))