开发环境

  1. 系统: ubuntu18.04
  2. 系统编码: $LANG = en_US.UTF-8
  3. 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": "\u4e2d\u6587\u5185\u5bb9"}

并非乱码, 其实是 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. ...

使用 requests 发送中文数据的demo

# encoding: utf-8
import time
import json
import requests def http_post(url, param=None):
param_json = param and json.dumps(param, ensure_ascii=False)
headers = {
"content-type": "application/json",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
"Chrome/71.0.3578.98 Safari/537.36"
} with requests.Session() as session:
for i in range(3):
try:
resp = session.post(url, headers=headers, data=param_json.encode("utf-8"), verify=False, timeout=10)
if resp.status_code < 300:
print(resp)
return
else:
print('status code %s' % resp.status_code)
break
except Exception as e:
print(e)
time.sleep(1)
break if __name__ == '__main__':
param = {
"code": "0",
"message": "中文内容"
}
param1 = json.dumps(param, ensure_ascii=False)
param2 = json.dumps(param)
print("param1: ", param1)
print("param2: ", param2)
http_post("http://10.10.19.199:8000/client/instesv/illegallogic", param=param)

接收方:

body content:[{"code": "0", "message": "中文内容"}]
ending ~

json.dumps()包装中文字符串的更多相关文章

  1. python3.4学习笔记(二十六) Python 输出json到文件,让json.dumps输出中文 实例代码

    python3.4学习笔记(二十六) Python 输出json到文件,让json.dumps输出中文 实例代码 python的json.dumps方法默认会输出成这种格式"\u535a\u ...

  2. python json.dumps输出中文问题

    json.dumps 输出的中文是"\u6211\u662f"格式的,输出中文需要指定ensure_ascii=False. json.dumps(actual,ensure_as ...

  3. python json.dumps() 中文乱码问题

    python json.dumps() 中文乱码问题   python 输出一串中文字符,在控制台上(控制台使用UTF-8编码)通过print 可以正常显示,但是写入到文件中之后,中文字符都输出成as ...

  4. python2.7字典转换成json时中文字符串变成unicode的问题:

    参考:http://blog.csdn.net/u014431852/article/details/53058951 编码问题: python2.7字典转换成json时中文字符串变成unicode的 ...

  5. Python下调用json.dumps中文显示问题解决办法

    json.dumps在默认情况下,对于非ascii字符生成的是相对应的字符编码,而非原始字符,例如: import json js = json.loads('{"haha": & ...

  6. python3解决 json.dumps中文乱码

    使用json.dumps()运行结果如下 role_name字段中文乱码了 只需要使用ensure_ascii=False 运行结果如下:

  7. python json.dumps()函数输出json格式,使用ensure_ascii参数对中文输入的支持

    在python使用过程中,输入中文,不能正常的输出,可以使用ensure_ascii参数来解决不能输入中文的问题 代码块: import json friends={"name": ...

  8. python 使用json.dumps() 的indent 参数,获得漂亮的格式化字符串后输出

    想获得漂亮的格式化字符串后输出,可以使用json.dumps() 的indent 参数.它会使得输出和pprint() 函数效果类似 >>> data {'age': 4, 'nam ...

  9. python将字符串转换成对应的python数据类型--eval和json.loads(),json.dumps()

    eval()和json.loads() 都可以将字符串转换成对应的python数据类型,举个字典的例子,同样适合其他数据类型元组.列表.集合. In [3]: ss = '{"a" ...

随机推荐

  1. [技术博客]react native事件监听、与原生通信——实现对通知消息的响应

    在react native中会涉及到很多页面之间的参数传递问题.静态的参数传递通常利用组件的Props属性,在初始化组件时即可从父组件中将参数传递到子组件中.对于非父子关系的组件来说,无法直接传递参数 ...

  2. 冰多多团队-第六次Scrum会议

    冰多多团队-第六次Scrum会议 工作情况 团队成员 已完成任务 待完成任务 zpj ASR bug修复 接入IAT模块 牛雅哲 完成语音识别->词典->termux的接口设计,熟悉了语法 ...

  3. IntelliJ IDEA 运行你的第一个Java应用程序 idea运行main方法

    IntelliJ IDEA 运行你的第一个Java应用程序创建项目让我们创建一个简单的Java Hello World项目. 单击创建新的项目. 打开新建项目向导.你应该注意的主要是项目的SDK.SD ...

  4. Fiddler抓包_次要功能和第三方插件

    1.替换HTTP Request Host 应用场景:进行开发时,线上去测试跳转调试 替换命令:urlreplace news.baidu.com www.baidu.com: 清除命令:urlrep ...

  5. oracle 数据库RPM安装方式

    下载RPM包 Oracle Database Software Downloads 下载Linux x86-64 对应的RPM oracle-database-ee-19c-1.0-1.x86_64. ...

  6. Elasticsearch学习笔记——索引模板

    在索引模板里面,date类型的字段的format支持多种类型,在es中全部会转换成long类型进行存储,参考 https://zhuanlan.zhihu.com/p/34240906 一个索引模板范 ...

  7. vue项目.eslintrc格式化

    场景:.eslintrc非常的严谨,但是严格总是好的,能写出好的代码.如何格式化呢?写好的代码 如何一键 变成符合.eslintrc规范的代码呢??? 比如 双引号变单引号    去掉分号等等. 解决 ...

  8. springboot:非web启动

    需要运行一些调度任务,但是又不想放到web容器中运行. 见红色代码: import java.util.concurrent.ThreadPoolExecutor; import org.spring ...

  9. 史上最全的中高级Java面试题汇总

    原文链接:https://blog.csdn.net/shengqianfeng/article/details/102572691 memcache的分布式原理 memcached 虽然称为 “ 分 ...

  10. 【MongoDB学习之三】条件操作符

    环境 MongoDB 4.0 CentOS6.5_x64 一.条件操作符 (>) 大于 - $gt (<) 小于 - $lt (>=) 大于等于 - $gte (<= ) 小于 ...