因此,我正在尝试使用 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()
`
那么,发生了什么?我是否误解了编码的工作原理或者这是一种不寻常的行为?