Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 无法输出包含重音符号的json编码的dict(内部为noob)_Python_Json_Utf 8 - Fatal编程技术网

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传输或存储。