python -m json.tool 中文乱码 Format JSON with python
现在以 json 为数据传输格式的 RESTful 接口非常流行。为调试这样的接口,一个常用的办法是使用 curl 命令:
curl http://somehost.com/some-restful-api
对于返回的 json 字符串,一般在服务端不加处理的情况下,都是没有任何 '\t' 和 '\n' 的。为了方便查看,在 bash 上可以简单地对它进行格式化:
curl http://somehost.com/some-restful-api | python -mjson.tool
当然这要求机器上安装了 python,其实也就是利用了 json.tool 这个程序。
然而有时候还有一个问题,就是若返回的 json 字符串中包含中文,那么这样打印出来之后,中文会变成以 \u 开头的转义形式,从而让程序员无法直接观察到中文的内容。这并非是一个 bug,而是 json 本身的标准,它要求 json 的内容都是 ascii 编码的。标准的 json 编码器和解码器都会遵循这一点。
解决这个问题的办法是编辑 json.tool 程序,该程序存在于 python 系统库安装路径下的 json/tool.py。在 main 方法的最后,将:
json.dump(obj, outfile, sort_keys=True, indent=4)
修改为:
json.dump(obj, outfile, sort_keys=True, indent=4, ensure_ascii=False)
即让 json.tool 程序不强行保证 json 的内容都转义为 ascii 编码。修改后,再次运行
curl http://somehost.com/some-restful-api | python -mjson.tool
打印的结果即可正常包含中文。
不过这样还是会有问题,当返回的 json 字符串中包含了一些类似 emoji 表情这种无法正常编码的字符时,将结果打印到 bash 没问题,但是一旦打印到 less 或者文件上,则会提示编码错误:
UnicodeEncodeError: 'ascii' codec can't encode characters in position 1-2: ordinal not in range(128)
解决办法,手动在 json.tool 程序中编码。在 json/tool.py 的最后,修改为(需提前 import codecs):
s = json.dumps(obj, sort_keys=True, indent=4, ensure_ascii=False)
outfile.write(codecs.encode(s, 'utf-8'))
这样就可以了。
gist: https://gist.github.com/nicky-zs/6af8a1afc771ad76d463

python -m json.tool 中文乱码 Format JSON with python的更多相关文章
- python json.dumps() 中文乱码问题
python json.dumps() 中文乱码问题 python 输出一串中文字符,在控制台上(控制台使用UTF-8编码)通过print 可以正常显示,但是写入到文件中之后,中文字符都输出成as ...
- Spring MVC3返回JSON数据中文乱码问题解决(转)
Spring MVC3返回JSON数据中文乱码问题解决 查了下网上的一些资料,感觉比较复杂,这里,我这几使用两种很简单的办法解决了中文乱码问题. Spring版本:3.2.2.RELEASE Jack ...
- Python 生成的页面中文乱码问题
第一 保证 程序源文件里的中文的编码格式,如我们把 源文件的编码设置成utf8的. reload(sys) sys.setdefaultencoding('utf-8') 第二, 告诉浏览器,我们须要 ...
- python向数据库插入中文乱码问题
1.python向数据库插入中文乱码问题 直接手动insert into 中文 不乱码,但是用程序跑起来就乱码. conn =MySQLdb.connect(host="127.0.0.1& ...
- python json.dumps中文乱码
json.dumps在默认情况下,对于非ascii字符生成的是相对应的字符编码,而非原始字符,例如: >>> import json>>> js = json.lo ...
- PHP读取mssql,json数据中文乱码
PHP及网页使用UTF-8编码,数据库是sql server2008,使用默认编码(936,即GBK编码) 当读取数据库数据时,使用php自带的json_encode()返回到前端,结果中文不显示. ...
- springmvc返回json字符串中文乱码问题
问题: 后台代码如下: @RequestMapping("menuTreeAjax") @ResponseBody /** * 根据parentMenuId获取菜单的树结构 * @ ...
- python3解决 json.dumps中文乱码
使用json.dumps()运行结果如下 role_name字段中文乱码了 只需要使用ensure_ascii=False 运行结果如下:
- spring mvc从@ResponseBody取到json发现中文乱码
问题背景:如题. 问题定位:代码跟踪,从源头入手,一步一步跟进,直到设置中文编码的地方. 问题代码: /** * 获取单个测试桩接口内容 * * @author wulinfeng * @param ...
随机推荐
- 使用 xmllint 验证 odoo xml文件
Odoo 源码包含了2个 relax ng 文件,也是odoo sa用来验证xml的正确性的. openerp/import_xml.rng openerp/addons/base/rng/view. ...
- 重置浏览器的默认样式(css reset)
(1)定义:首先css reset指的是重置浏览器的默认样式 (2)作用:因为现在的浏览器很多,并且每个浏览器都有自己的默认样式,这样就会导致一个页面在多个浏览器下展示产生差异,所以我们需要做一些处理 ...
- Python+Selenium框架 ---自动化测试报告的生成
本文来介绍如何生成自动化测试报告,前面文章尾部提到了利用HTMLTestRunner.py来生成自动化测试报告.关于HTMLTestRunner不过多介绍,只需要知道是一个能生成一个HTML格式的网页 ...
- 使用Nightwatch.js做基于浏览器的web应用自动测试
1 安装 1.1 安装Node.js 在http://nodejs.org/ 上下载适合本机系统的安装包运行安装,注意安装选项中选择npm tool以用于后续依赖包的安装. 1.2 ...
- upstart man
man upstart nit(8) init(8) NAME init - Upstart process management daemon SYNOPSIS init [OPTION]... D ...
- CentOSyum操作
查看已经安装yum: yum list installed|grep mysql 查看yum: yum list|grep mysql 更新yum: rpm -ivh mysql-community- ...
- java UUID的解析与应用(转载)
原文链接:http://www.blogjava.net/feelyou/archive/2008/10/14/234320.html 讨论UUID的定义.分类.应用及生成工具. 什么是UUID? U ...
- flume-ng script should first try finding java from PATH and then try using bigtop, instead of vice-versa
[FLUME-1154] flume-ng script should first try finding java from PATH and then try using bigtop, inst ...
- 修改JDK环境变量,不生效的问题
一般是在/etc/profile下面配置JDK的环境变量 JAVA_HOME=/data/jdk1.7.0_72 JRE_HOME=/data/jdk1.7.0_72/jre PATH=$PATH:$ ...
- cenos 6.5 安装apache 2.4.28出现种问题
编译出错 configure: error: APR-util not found. Please read the documentation 解决办法 wget http://apache.fre ...