Convertendo a codificação de barra dupla utf-8

Eu não posso pegar isto para trabalhar! Eu tenho um arquivo de texto de um analisador de arquivo de jogo salvo com um monte de nomes chineses UTF-8 nele na forma de bytes, como este no source.txt:

\ xe6 \ x89 \ x8e \ xe5 \ x8a \ xa0 \ xe6 \ x8b \ x89

Mas, não importa como eu importe para Python (3 ou 2), eu recebo essa string, na melhor das hipóteses:

\\ xe6 \\ x89 \\ x8e \\ xe5 \\ x8a \\ xa0 \\ xe6 \\ x8b \\ x89

Tentei, como outros threads sugeriram, recodificar a string como UTF-8 e decodificá-la com escape unicode, da seguinte maneira:

stringName.encode("utf-8").decode("unicode_escape")

Mas, em seguida, atrapalha a codificação original e fornece isso como a sequência:

'æ \ x89 \ x8eå \ x8a \ xa0æ \ x8b \ x89' (imprimir esta cadeia de caracteres resulta em: æå æ)

Agora, se eu copiar e colar manualmente b + a sequência original no nome do arquivo e codificá-la, obtive a codificação correta. Por exemplo:

b'\xe6\x89\x8e\xe5\x8a\xa0\xe6\x8b\x89'.encode("utf-8")

Resultados em: '扎加拉'

Mas não posso fazer isso programaticamente. Não consigo nem me livrar das barras duplas.

Para ficar claro, o source.txt contém barras invertidas únicas. Eu tentei importá-lo de várias maneiras, mas isso é o mais comum:

with open('source.txt','r',encoding='utf-8') as f_open:
    source = f_open.read()

Ok, então eu cliquei na resposta abaixo (acho), mas aqui está o que funciona:

from ast import literal_eval
decodedString = literal_eval("b'{}'".format(stringVariable)).decode('utf-8')

Não posso usá-lo em todo o arquivo por causa de outros problemas de codificação, mas extrair cada nome como uma string (stringVariable) e depois fazer isso funcionar! Obrigado!

Para ser mais claro, o arquivo original não é apenas essas codificações utf confusas. Apenas os utiliza para determinados campos. Por exemplo, aqui está o começo do arquivo:

{'m_cacheHandles': ['s2ma\x00\x00CN\x1f\x1b"\x8d\xdb\x1fr \\\xbf\xd4D\x05R\x87\x10\x0b\x0f9\x95\x9b\xe8\x16T\x81b\xe4\x08\x1e\xa8U\x11',
                's2ma\x00\x00CN\x1a\xd9L\x12n\xb9\x8aL\x1d\xe7\xb8\xe6\xf8\xaa\xa1S\xdb\xa5+\t\xd3\x82^\x0c\x89\xdb\xc5\x82\x8d\xb7\x0fv',
                's2ma\x00\x00CN\x92\xd8\x17D\xc1D\x1b\xf6(\xedj\xb7\xe9\xd1\x94\x85\xc8`\x91M\x8btZ\x91\xf65\x1f\xf9\xdc\xd4\xe6\xbb',
                's2ma\x00\x00CN\xa1\xe9\xab\xcd?\xd2PS\xc9\x03\xab\x13R\xa6\x85u7(K2\x9d\x08\xb8k+\xe2\xdeI\xc3\xab\x7fC',
                's2ma\x00\x00CNN\xa5\xe7\xaf\xa0\x84\xe5\xbc\xe9HX\xb93S*sj\xe3\xf8\xe7\x84`\xf1Ye\x15~\xb93\x1f\xc90',
                's2ma\x00\x00CN8\xc6\x13F\x19\x1f\x97AH\xfa\x81m\xac\xc9\xa6\xa8\x90s\xfdd\x06\rL]z\xbb\x15\xdcI\x93\xd3V'],
'm_campaignIndex': 0,
'm_defaultDifficulty': 7,
'm_description': '',
'm_difficulty': '',
'm_gameSpeed': 4,
'm_imageFilePath': '',
'm_isBlizzardMap': True,
'm_mapFileName': '',
'm_miniSave': False,
'm_modPaths': None,
'm_playerList': [{'m_color': {'m_a': 255, 'm_b': 255, 'm_g': 92,   'm_r': 36},
               'm_control': 2,
               'm_handicap': 0,
               'm_hero': '\xe6\x89\x8e\xe5\x8a\xa0\xe6\x8b\x89',

Todas as informações antes do campo 'm_hero': não são utf-8. Portanto, o uso da solução do ShadowRanger funcionará se o arquivo for composto apenas dessas codificações utf falsas, mas não funcionará quando eu já tiver analisado m_hero como uma string e tentar convertê-lo. A solução de Karin funciona para isso.

questionAnswers(6)

yourAnswerToTheQuestion