не может вывести кодировку в кодировке json с акцентами (нуб внутри) - PullRequest
1 голос
/ 01 мая 2010

вот довольно простой пример, который сводит меня с ума уже пару дней. Учитывая следующий скрипт:

# -*- coding: utf-8 -*
from json import dumps as json_dumps

machaine = u"une personne émérite"
print(machaine)

output = {}
output[1] = machaine
jsonoutput = json_dumps(output)
print(jsonoutput)

Результат этого из cli:

une personne émérite
{"1": "une personne \u00e9m\u00e9rite"}

Я не понимаю, почему у них такая разница между двумя строками. Я пробовал все виды кодирования, декодирования и т. д., но я не могу найти правильный способ сделать это. У кого-нибудь есть идея?

Заранее спасибо. Матье

Ответы [ 2 ]

3 голосов
/ 01 мая 2010

Кодировка правильная. Загрузите его обратно и распечатайте, и вы увидите правильный вывод:

>>> import json
>>> jsoninput = json.loads(jsonoutput)
>>> print jsoninput
{u'1': u'une personne \xe9m\xe9rite'}
>>> print jsoninput['1']
une personne émérite
2 голосов
/ 01 мая 2010

Чтобы уточнить ответ Марсело Кантоса: json.dumps() возвращает JSON-кодировку, которая представляет собой строку ASCII , начинающуюся с символа '{' и содержащую обратную косую черту, кавычки и т. Д. Вы должны декодировать это (например, с json.loads(), чтобы получить реальный диктат с данными.

# -*- coding: utf-8 -*
import json

output = {1: u"une personne émérite"}
print output[1]

json_encoded = json.dumps(output)
print "Encoded: %s" % repr(json_encoded)

input = json.loads(json_encoded)
print input['1']

выходы:

une personne émérite
Encoded: '{"1": "une personne \\u00e9m\\u00e9rite"}'
une personne émérite
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...