0

因此,我正在尝试使用 Mu 的 pygame,并从一个非常简单的代码开始,该代码创建一个窗口并为窗口提供标题。我是巴西人,所以我在这个标题中有带重音的单词,当我运行代码时,字母都搞砸了。

我使用的字符串是"Invasão Alienígena"。当我运行代码时,它变成“Invasão AlienÃ-gena”

所以我想,好吧,这是一个问题。我检查了sys.stdout.enconding它给了我utf-8。我认为这很奇怪,如果我使用这个编码,它不应该给出正确的字符吗?还是我理解的不对?

我检查了python版本并给了我3.6.3

我查找了特殊字符的十六进制值,并将它们放入字符串中,如“Invas\xE3o Alien\xEDgena”,它起作用了。但我对这种方法并不满意。

所以我读了很多东西,尝试了我发现的所有东西,但没有任何效果。然后我开始玩耍并得到了这个

title = "Invasão Alienígena".encode("latin-1").decode("utf-8")

它奏效了!我只是不明白为什么它会起作用。在我看来,pygame 是在latin-1中解码,而不是在utf-8中,但我不能确定。

`

import sys  
import pygame  

print(sys.stdout.encoding)  
print(sys.version)  
def run_game():  
    pygame.init()  
    print("Invasão Alienígena") #prints Invasão Alienígena to stdout  
    #title = "Invas\xE3o Alien\xEDgena" #If i use this it will work without encoding/decoding  
    title = "Invasão Alienígena".encode("latin-1").decode("utf-8") #this works
    screen = pygame.display.set_mode((1200, 600))  
    pygame.display.set_caption(title)  

    while True:  
        for event in pygame.event.get():  
            if event.type == pygame.QUIT:  
                sys.exit()  
        pygame.display.flip()  

run_game()  

`

那么,发生了什么?我是否误解了编码的工作原理或者这是一种不寻常的行为?

4

0 回答 0