现在以 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的更多相关文章

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

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

  2. Spring MVC3返回JSON数据中文乱码问题解决(转)

    Spring MVC3返回JSON数据中文乱码问题解决 查了下网上的一些资料,感觉比较复杂,这里,我这几使用两种很简单的办法解决了中文乱码问题. Spring版本:3.2.2.RELEASE Jack ...

  3. Python 生成的页面中文乱码问题

    第一 保证 程序源文件里的中文的编码格式,如我们把 源文件的编码设置成utf8的. reload(sys) sys.setdefaultencoding('utf-8') 第二, 告诉浏览器,我们须要 ...

  4. python向数据库插入中文乱码问题

    1.python向数据库插入中文乱码问题 直接手动insert into 中文 不乱码,但是用程序跑起来就乱码. conn =MySQLdb.connect(host="127.0.0.1& ...

  5. python json.dumps中文乱码

    json.dumps在默认情况下,对于非ascii字符生成的是相对应的字符编码,而非原始字符,例如: >>> import json>>> js = json.lo ...

  6. PHP读取mssql,json数据中文乱码

    PHP及网页使用UTF-8编码,数据库是sql server2008,使用默认编码(936,即GBK编码) 当读取数据库数据时,使用php自带的json_encode()返回到前端,结果中文不显示. ...

  7. springmvc返回json字符串中文乱码问题

    问题: 后台代码如下: @RequestMapping("menuTreeAjax") @ResponseBody /** * 根据parentMenuId获取菜单的树结构 * @ ...

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

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

  9. spring mvc从@ResponseBody取到json发现中文乱码

    问题背景:如题. 问题定位:代码跟踪,从源头入手,一步一步跟进,直到设置中文编码的地方. 问题代码: /** * 获取单个测试桩接口内容 * * @author wulinfeng * @param ...

随机推荐

  1. android客户端向服务器端验证登陆方法的实现2

    一.在上一篇文章中,我只是提到了其中一种方法来实现登陆 大家可以参见: http://www.apkbus.com/android-45004-1-1.html      android获取web服务 ...

  2. SpringMVC:JSON

    @ResponseBody params="json":访问我这个方法的时候一定要有参数名为json 返回值Userjackson-all-1.9.0.jar @RequestMa ...

  3. http://www.cnblogs.com/yycxbjl/archive/2010/04/20/1716689.html

    http://www.cnblogs.com/yycxbjl/archive/2010/04/20/1716689.html PS: 开发工具 VS2010, 所有工程都为Debug状态,本人刚接触 ...

  4. 基于flask做权限控制

    和Django实现的原理类似,有时间补充

  5. python--员工信息管理系统编译及思路

    员工管理系统,顾名思义,应该具有增删查改功能.拿到需求后,应该按照一定的流程依次编写,最后达到程序的统一和兼容. 系统需求如下: 文件存储格式如下: id,name,age,phone,job 1,A ...

  6. hbase shell删除没实用

    用Xshell登陆linux主机后,在hbase shell下不能使用backspace和delete删除误输的指令,这是Xshell的配置问题: 在File->Properties->T ...

  7. listview 下拉刷新

    http://blog.csdn.net/lancees/article/details/7776853

  8. 计算机鼻祖-Donald Knuth(高纳德) 的传奇

    李开复说,练内功,不要仅仅花功夫学习各种流行的编程语言和工具,以及一些公司招聘广告上要求的科目.要把数据结构.算法.数据库.操作系统原理.计算机体系结构.计算机网络,离散数学等基础课程学好.最好还是试 ...

  9. 虚拟化(四):vsphere高可用功能前提-共享存储搭建(使用微软提供的iscsi software target,也可以使用免费开源的openfiler)

    虚拟化(一):虚拟化及vmware产品介绍 虚拟化(二):虚拟化及vmware workstation产品使用 虚拟化(三):vsphere套件的安装注意及使用 虚拟化(四):vsphere高可用功能 ...

  10. 怎样把word直接转换成ppt