json.dumps()包装中文字符串
Posted kaichenkai
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了json.dumps()包装中文字符串相关的知识,希望对你有一定的参考价值。
开发环境
- 系统: ubuntu18.04
- 系统编码: $LANG = en_US.UTF-8
- python解释器版本: Python 3.6.7
乱码现场
使用 json.dumps() 将 dict 转化为 json 数据的时候, 中文会显示为对应的 unicode 编码形式, 如果是将数据发送到第三方, 那么也会显示 unicode 编码形式, 很僵硬. ( 虽然说尽量使用英文进行交互, 但是相关部门的车牌号, 违法地址等信息都是中文的阿... )
demo:
param = {
"code": "0",
"message": "中文内容"
}
param1 = json.dumps(param, ensure_ascii=False)
param2 = json.dumps(param)
print(param1)
print(param2)
输出内容:
param1: {"code": "0", "message": "中文内容"}
param2: {"code": "0", "message": "u4e2du6587u5185u5bb9"}
并非乱码, 其实是 unicode 的16进制表示形式.
分析
区别在于 ensure_ascii=False 这个参数, 看下 json.dumps() 的方法的源码:
def dumps(obj, *, skipkeys=False, ensure_ascii=True, check_circular=True,
allow_nan=True, cls=None, indent=None, separators=None,
default=None, sort_keys=False, **kw):
...
# 如果 ensure_ascii 为false,则返回值可以包含非ascii值
If ``ensure_ascii`` is false, then the return value can contain non-ASCII
characters if they appear in strings contained in ``obj``. Otherwise, all
such characters are escaped in JSON strings.
...
ending ~
以上是关于json.dumps()包装中文字符串的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Python 中使用 json.dumps() 将整数打印为十六进制字符串
json.dumps 和 json.load 有啥区别? [关闭]
python中json文件处理涉及的四个函数json.dumps()和json.loads()json.dump()和json.load()的区分