我只是学习编程,所以我的问题可能是微不足道的。对不起!
我希望程序在屏幕上使用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)为什么这样工作?
答案 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在那里访问它。