Итак, я пробую 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()
`
Итак, что происходит?Я неправильно понял, как работает кодировка, или это необычное поведение?