如何在Pygame中绘制str(非拉丁词)?

时间:2014-08-18 20:53:17

标签: python pygame

我只是学习编程,所以我的问题可能是微不足道的。对不起!

我希望程序在屏幕上使用Pygame绘制一个单词(俄语)。这没关系,一切正常:

# coding=utf-8
import pygame,sys

pygame.init()

screen = pygame.display.set_mode((640,480))

some_font=pygame.font.Font(None,30)

word_to_print=some_font.render(u'привет',True,(255,255,255),(0, 0, 0))

while 1:
        screen.blit(word_to_print,(0,0))
        for event in pygame.event.get():
        if event.type == pygame.QUIT: sys.exit()
        pygame.display.update()

但是当我尝试绘制相同的单词时,却采用这种形式:

some_font.render(str('привет'),True,(255,255,255),(0, 0, 0))

=>输出是看起来很奇怪的垃圾(类似于ÐÐμÑÑа)。

我有两个问题:

1)如何让我的程序drow str(俄语中的任何单词)?

2)为什么这样工作?

2 个答案:

答案 0 :(得分:1)

  
    

1)如何让我的程序绘制str(俄语中的任何单词)?

  

严格地说,你不能。如果要显示任意俄语文本,则应将该文本存储在unicode()对象中,而不是str()对象中:

unicode_string = u'привет'
some_font.render(unicode_string, ...)

如果您无权访问原始unicode()字符串,但只有编码的str()字符串,则可以解码,如果您知道编码:

str_string = 'привет'
unicode_string = str_string.decode('utf-8')
some_font.render(unicode_string, ...)

如果您申请str()的对象不是str()(请参阅下面的评论),那么您可以致电unicode()

unicode_string = unicode(my_object)
some_font.render(unicode_string, ...

最后,如果您应用str()的对象不提供.__unicode__()方法,但确实返回编码的str()字符串,则可以解码该字符串,如果您知道编码:

str_string = str(my_object)
unicode_string = str_string.decode('utf-8')
some_font.render(unicode_string, ...
  
    

2)为什么这样工作?

  

pygame docs,"接受Unicode和char(字节)字符串。对于char字符串,假定为LATIN1编码。"您已将utf-8编码的字符串传递给需要latin1编码字符串的方法。

答案 1 :(得分:-1)

font.Font的默认字体不支持许多非拉丁字符。如果您使用的是Windows 10,则可以在C:\ Windows \ Fonts中找到计算机上的字体,但它们必须是.ttf(不是.ttc)类型。如果您没有支持语言字符的正确文件类型的字体,那么您可以在线轻松下载。此外,出于某种原因,当我下载在线字体时,它无法从Windows字体文件夹中使用,我必须将其保存在单独的文件夹中并使用font.Font在那里访问它。