无法输出包含重音符号的 JSON 编码字典(小白)

2 投票
2 回答
1805 浏览
提问于 2025-04-15 22:14

这里有一个相当简单的例子,最近让我很困惑。考虑以下这个脚本:

# -*- 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)

从命令行得到的结果是:

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

我不明白为什么这两个字符串之间会有这么大的差别。我尝试了各种编码、解码的方法,但就是找不到正确的做法。有没有人知道该怎么做?

提前谢谢大家。
马修

2 个回答

2

为了更清楚地解释Marcelo Cantos的回答: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
3

编码是正确的。把它重新加载进来并打印出来,你就会看到正确的结果:

>>> import json
>>> jsoninput = json.loads(jsonoutput)
>>> print jsoninput
{u'1': u'une personne \xe9m\xe9rite'}
>>> print jsoninput['1']
une personne émérite

撰写回答