Неспособность написать текстовый файл с символами utf8 - PullRequest
0 голосов
/ 20 марта 2019

Я пытаюсь сохранить текстовый файл, содержащий такие символы, как áàã и т. Д. Однако в настоящее время у меня происходит сбой, и я не могу заставить его работать с тем, что я видел в Интернете.

Мой текущий код:

# -*- coding: utf-8 -*-

import codecs
import json

test_dict = {'name': [u'Joe', u'Doe'], 'id': u'1:2:3', 'description': u'he w\xe1','fav': [1, 2]}
final_text = line = "- " + json.dumps(test_dict) + "\n"

filename = 'C:\Users\PLUX\Desktop\data.txt'
f = codecs.open(filename,'w','utf8')
f.write(line)

, который выводит:

- {"description": "he w\u00e1", "fav": [1, 2], "name": ["Joe", "Doe"], "id": "1:2:3"}

Я хотел бы вывести:

- {"description": "he wá", "fav": [1, 2], "name": ["Joe", "Doe"], "id": "1:2:3"}

Может кто-нибудь помочь мне?

1 Ответ

1 голос
/ 20 марта 2019

\u00e1 - экранированная версия символа в юникоде. Модуль json преобразует его обратно в ожидаемое представление при загрузке данных.

Если вам действительно нужна неэкранированная версия в вашем файле, передайте ensure_ascii=False в json.dumps:

>>> print json.dumps(test_dict, ensure_ascii=False)
{"description": "he wá", "fav": [1, 2], "name": ["Joe", "Doe"], "id": "1:2:3"}

Чтобы записать в файл, сделайте следующее:

>>> final_text = u'- ' + json.dumps(test_dict, ensure_ascii=False) + u'\n'
>>> with io.open('foo.txt', 'w', encoding='utf-8') as f:
...     f.write(final_text)

Примечание. Я явно пометил строки, которые объединяются, как Unicode, так как я не хочу, чтобы Python 2 «услужливо» преобразовывал результат в строку байтов.

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