python:json.dumps无法处理utf-8?

时间:2010-11-15 12:00:17

标签: python json

以下是测试程序,包括中文字符:

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

j = {"d":"中", "e":"a"}
json = json.dumps(j, encoding="utf-8")

print json

下面是结果,看看json.dumps将utf-8转换为原始数字!

{"e": "a", "d": "\u4e2d"}

为什么这会被打破?或者我错了什么?

3 个答案:

答案 0 :(得分:58)

对我来说看起来像是有效的JSON。如果您希望json输出一个包含非ASCII字符的字符串,则需要传递ensure_ascii=False,然后再手动编码。

答案 1 :(得分:28)

您应该阅读json.org。完整的JSON规范位于右侧的白色框中。

生成的JSON没有任何问题。允许生成器生成UTF-8字符串或纯ASCII字符串,其中字符使用\uXXXX表示法进行转义。在您的情况下,Python json模块决定进行转义,具有转义符号\u4e2d

顺便说一下:任何符合要求的JSON解释器都会正确地再次浏览这个序列,然后返回实际角色。

答案 2 :(得分:5)

将simplejson与上述选项一起使用:

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

j = {"d":"中", "e":"a"}
json = json.dumps(j, ensure_ascii=False, encoding="utf-8")

print json

前前后后:

{"e": "a", "d": "中"}