Как записать Unicode японский из файла в другой файл? - PullRequest
0 голосов
/ 09 января 2019

У меня есть несколько файлов json, и есть места с закодированным японским языком, таким как \u672c\u30fb\u96d1\u8a8c\u30fb\u66f8\u7c4d\u60c5\u5831, и я хочу декодировать их на японский.

Проблема в том, когда я использую этот метод:

text = '\u672c\u30fb\u96d1\u8a8c\u30fb\u66f8\u7c4d\u60c5\u5831'
print(text)

И это напечатано

本・雑誌・書籍情報

Но когда я читаю его непосредственно из файла, например, подготовленный файл - index.json, а его содержимое просто:

\u672c\u30fb\u96d1\u8a8c\u30fb\u66f8\u7c4d\u60c5\u5831

и метод, который я использовал

file = open('index.json','r')
text = file.read()
print(text)

и только что напечатано

\u672c\u30fb\u96d1\u8a8c\u30fb\u66f8\u7c4d\u60c5\u5831

Одна вещь, которую я нашел немного странной, это то, что, когда я пытался напечатать:

print(file.read())
print(text)

file.read() ничего не возвращает, даже с file.read(1).

Редактировать: Я обнаружил, что основная проблема в том, что когда вы пишете text = '\u672c', python распознает \u672c как один символ. Но когда вы читаете из файла, он распознает его как строку из 6 символов. В любом случае, чтобы преобразовать это?

1 Ответ

0 голосов
/ 11 января 2019

Здесь есть несколько проблем.

Допустим, ваш файл содержит следующий (буквальный) текст:

\u672c\u30fb\u96d1\u8a8c\u30fb\u66f8\u7c4d\u60c5\u5831

Вы можете представить это в Python как

text = '\\u672c\\u30fb\\u96d1\\u8a8c\\u30fb\\u66f8\\u7c4d\\u60c5\\u5831'

OR

text = r'\u672c\u30fb\u96d1\u8a8c\u30fb\u66f8\u7c4d\u60c5\u5831'

Чтобы преобразовать экранированные символы в символы Юникода, которые они представляют, вам необходимо правильно их декодировать:

text.encode('ascii').decode('unicode-escape')

результат в

本・雑誌・書籍情報

Причина, по которой file.read() и file.read(1) не сработали, заключается в том, что файл не перематывается автоматически. Как только вы прочитаете файл, он будет в конце, пока вы не перемотаете его вручную или не закроете и не откроете снова.

...