json.dumps中的ensure_ascii参数

json dump 中文时遇到的问题如下

1
2
3
4
>>> import json
>>> s = "Chinese"
>>> print json.dumps(s)
"Chinese"
1
2
3
4
>>> import json
>>> s = "中文"
>>> print json.dumps(s)
"\u4e2d\u6587"

可以看到, json在dump中文的时候, 输出的是”中文”对应的ascii码, 这是因为json.dumps 序列化时对中文默认使用的ascii编码

如果需要输出真正的中文字符, 需要在dump的时候加入ensure_ascii=False参数

1
2
3
4
>>> import json
>>> s = "中文"
>>> print json.dumps(s, ensure_ascii=False)
"中文"

实际使用中, 在与微信企业企业号的主动发送消息接口交互时, 需要使用utf8字符编码encode

所以在这个场景下, 写法可能会是下面这种情况

json.dumps(s, ensure_ascii=False).encode('utf-8')

Python3: 注意以下操作只在Python3环境下是正确的, Python2的环境下.encode会报错

1
2
3
4
5
6
7
8
9
10
➜  ~ python3
Python 3.6.3 (v3.6.3:2c5fed86e0, Oct 3 2017, 00:32:08)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import json
>>> s = "中文"
>>> json.dumps(s, ensure_ascii=False)
'"中文"'
>>> json.dumps(s, ensure_ascii=False).encode('utf8')
b'"\xe4\xb8\xad\xe6\x96\x87"'