Python 无法输出包含重音符号的json编码的dict(内部为noob)
这是一个相当简单的例子,几天后它就让我发疯了。考虑到以下脚本:Python 无法输出包含重音符号的json编码的dict(内部为noob),python,json,utf-8,Python,Json,Utf 8,这是一个相当简单的例子,几天后它就让我发疯了。考虑到以下脚本: # -*- 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 pers
# -*- 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"}
我不明白为什么这两个字符串之间有这么大的差异。
我一直在尝试各种编码,解码等,但我似乎无法找到正确的方法来做这件事。有人有主意吗
提前谢谢。
Matthieu编码正确。重新加载并打印,您将看到正确的输出:
>>> import json
>>> jsoninput = json.loads(jsonoutput)
>>> print jsoninput
{u'1': u'une personne \xe9m\xe9rite'}
>>> print jsoninput['1']
une personne émérite
为了澄清Marcelo Cantos的回答:
json.dumps()
返回一个json编码,它是一个ASCII字符串,以字符“{”开头,包含反斜杠、引号等。您必须对其进行解码(例如,使用json.loads()
)才能用数据返回实际的dict
# -*- 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
é
已被编码为\u00e9
,因为它不是ASCII字符。这有什么问题?出于好奇,javascript如何处理编码字符?JS将正常工作。例如,将其保存为文件并加载到浏览器中,您应该看到正确的字符串(至少我看到):x=eval(“({”1”):“une personne\\u00e9m\\u00e9rite”});document.write(x[1]);JSON编码不是ASCII字符串。它们是Unicode字符串,通常作为UTF-8传输或存储。