Кодировка теряется при сохранении в файл - PullRequest
0 голосов
/ 02 апреля 2012

У меня есть список, который содержит словари. Каждый словарь имеет атрибут description, который должен содержать строку. Когда я помещаю эту строку в словарь, я знаю, что она имеет правильную кодировку (при печати в терминале она выглядит хорошо). Кроме того, если я напечатаю значение description после того, как оно было установлено, строка все равно будет выглядеть хорошо. Затем я использую JSONEncoder.encode(myList) и сохраняю эту строку JSON в файл, используя следующий код:

file_obj = open("file.txt", "w")
file_obj.write(text)
file_obj.close()

Тогда при открытии файла символы отображаются неправильно. Например. \u00e5, \u00f8d и \u00e6.

Кто-нибудь имеет представление, почему это так и как я могу это исправить?

Ответы [ 2 ]

3 голосов
/ 02 апреля 2012

Кодировка JSON предназначена для создания строки, которая может быть загружена с помощью декодирования JSON, и это именно то, что она делает. «Как он выглядит при открытии файла» - это не то же самое, что «как он будет выглядеть, если вы запустите его через JSON-декодер» - JSON-декодер также декодирует экранирование \u####.

Если вы хотите, чтобы файл содержал необработанный Unicode, а не \u#### Escape, не используйте JSON-кодировщик; это не то, для чего он предназначен.

2 голосов
/ 02 апреля 2012

json будет выдавать unicode с, если вы передадите ensure_ascii=False. Затем вы можете использовать codecs.open() для правильного кодирования при сохранении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...