Convertir codificación doble barra oblicua utf-8

¡No puedo conseguir que esto funcione! Tengo un archivo de texto de un analizador de archivos de juegos guardados con un montón de nombres chinos UTF-8 en forma de bytes, como este en la fuente.txt:

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

Pero, no importa cómo lo importe en Python (3 o 2), obtengo esta cadena, en el mejor de los casos:

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

He intentado, como han sugerido otros hilos, volver a codificar la cadena como UTF-8 y luego decodificarla con escape unicode, así:

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

Pero luego estropea la codificación original, y da esto como la cadena:

'æ \ x89 \ x8eå \ x8a \ xa0æ \ x8b \ x89' (imprimir esta cadena da como resultado: æå æ)

Ahora, si copio y pego manualmente b + la cadena original en el nombre del archivo y lo codifico, obtengo la codificación correcta. Por ejemplo:

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

Resultados en: '扎加拉'

Pero no puedo hacer esto mediante programación. Ni siquiera puedo deshacerme de las barras dobles.

Para ser claros, source.txt contiene barras invertidas simples. He intentado importarlo de muchas maneras, pero este es el más común:

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

Bien, hice clic en la respuesta a continuación (creo), pero esto es lo que funciona:

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

No puedo usarlo en todo el archivo debido a otros problemas de codificación, ¡pero extraer cada nombre como una cadena (stringVariable) y luego hacerlo funciona! ¡Gracias!

Para ser más claro, el archivo original no es solo estas codificaciones utf desordenadas. Solo los usa para ciertos campos. Por ejemplo, aquí está el comienzo del archivo:

{'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',

Toda la información antes del campo 'm_hero': no es utf-8. Entonces, usar la solución de ShadowRanger funciona si el archivo solo está compuesto de estas codificaciones utf falsas, pero no funciona cuando ya he analizado m_hero como una cadena e intento convertir eso. La solución de Karin funciona para eso.

Respuestas a la pregunta(6)

Su respuesta a la pregunta