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"'
|