/ / Como converter uma string contendo unicode escape u #### para utf-8 string - python, python-3.x, unicode, python-unicode

Como converter uma string contendo unicode escape u #### para utf-8 string - python, python-3.x, unicode, python-unicode

Estou tentando isso desde a manhã.

Minhas sample.txt

choice = u9078u629e

Código:

with open("sample.txt", encoding="utf-8") as f:
for line in f:
print(line)
print("選択" in line)
print(line.encode("utf-8").decode("utf-8"))
print(line.encode().decode("utf-8"))
print(line.encode("utf-8").decode())
print(line.encode().decode("unicode-escape").encode("latin-1").decode("utf-8")) # as suggested.

out:
choice = u9078u629e
False
choice = u9078u629e
choice = u9078u629e
choice = u9078u629e
UnicodeEncodeError: "latin-1" codec can"t encode characters in position 9-10: ordinal not in range(256)

Quando faço isso no ipython qtconsole:

In [29]: "choice = u9078u629e"
Out[29]: "choice = 選択"

Então, a questão é como posso ler o arquivo de texto que contém a string de escape unicode como u9078u629e (Eu não sei exatamente o que é chamado) e convertê-lo para utf-8 como 選択?

Respostas:

2 para resposta № 1

Se você lê-lo de um arquivo, basta dar a codificação ao abrir:

with open("test.txt", encoding="unicode-escape") as f:
a = f.read()
print(a)

# choice = 選択

com test.txt contendo:

escolha = u9078u629e

Se você já tivesse seu texto em uma string, poderia convertê-lo assim:

a = "choice = \u9078\u629e"
a.encode().decode("unicode-escape")
# "choice = 選択"