Как сделать, чтобы читая из файла python переводил коды символов в сами символы?

Когда строку с кодами типа /uXXXX я помещаю в переменную, то print замечательно их переводит в нужные символы.

jap = '\u7fa9\u5149 \u5317\u91ce\u8c37'
print(jap)

義光 北野谷

А когда я читаю эти же символы из файла и делаю print, то питон их не переводит, а оставляет как есть.

with open('jap.txt', 'r') as file:
    for line in file:
        print(line)

\u7fa9\u5149 \u5317\u91ce\u8c37

Как сделать, чтобы читая из файла python переводил коды символов в сами символы?


Ответы (2 шт):

Автор решения: Dmitry

Попробуйте вот так:

.........
        print(line.encode().decode("utf-8", "strict"))

первая директива line.encode() даст результат в битовой последовательности, примерно такой:

b'\xe7\xbe\xa9\xe5\x85\x89 \xe5\x8c\x97\xe9\x87\x8e\xe8\xb0\xb7'

затем декодировать через utf-8. И результат, ожидаемо

'義光 北野谷'
→ Ссылка
Автор решения: Roman Konoval

В вашем файле обычные символы ASCII. Да, они являются последовательностями кодирующими юникод, но раскодировать их нужно вручную. В исходном файле питон, в строковых литералах интерпертатор это делает за вас.

with open('jap.txt', 'rb') as file:
    for line in file:
        print(line.decode("unicode_escape"))

Обратите внимание на флаг b в open.

→ Ссылка