Python27中Json对中文的处理

应用场景如下:从api下载数据,json解析,存入字典,定期保存。重启程序需要加载保存的文本。

问题1:json中都是unicode串,存到文本里都是些\u***

解决:关闭ensure_ascii开关

json.dump(pub.listData,fp,ensure_ascii=False)

问题2:字典关键字用的数字,从文本load后变为unicode串

解决:

走了一点弯路,网上的解决方法,都是转换,把串转回utf-8,方法是 def byteify(input):     if isinstance(input, dict):         return {byteify(key):byteify(value) for key,value in input.iteritems()}     elif isinstance(input, list):         return [byteify(element) for element in input]     elif isinstance(input, unicode):         return input.encode('utf-8')     else:         return input

但发现,json相关的都是unicode,转不胜转。

最后解决方法,还是用unicode存,但是load后,加一个处理,把key转换为数值就行

pub.listData=json.load(fp)      pub.listData={int(k):v for k,v in pub.listData.items()}

问题3:编码问题

解决:

    默认情况下,用sys.getdefaultencoding()查看是utf-8     decode(code):把code转换为unicode     encode(code):把unicode转换为code

  如果对一个非unicode格式的串,调用encode的话,则会用默认编码转化为unicode,再进行encode。系统默认编码为ascii,所以常常出错

设置默认编码:

在python的Lib\site-packages文件夹下新建一个sitecustomize.py,内容为:

# encoding=utf8 

import sys 

reload(sys) 

sys.setdefaultencoding('utf8')

问题4:读入unicode的中文的处理

比如csv文件,excel正常,python读入数据类似:

[18]:'\xc2\xf2\xd2\xbb\xc1\xbf'

直接输出为乱码,需要解码再编码:

print df.columns[0].decode("gbk").encode('utf-8')

市场代码

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏java工会

超全超简洁SSM知识点总结

227100
来自专栏小樱的经验随笔

【Java学习笔记之三十四】超详解Java多线程基础

前言 多线程并发编程是Java编程中重要的一块内容,也是面试重点覆盖区域,所以学好多线程并发编程对我们来说极其重要,下面跟我一起开启本次的学习之旅吧。 正文 线...

39650
来自专栏行者常至

008.多线程-synchronized锁

为了解决线程安全问题, 我们的做法是:不要让多个线程同时对一个全局变量作写的操作。

12320
来自专栏Python自动化测试

Jmeter4.0接口测试之断言实战(六)

在接口测试用例中得有断言,没有断言的接口用例是无效的,一个接口的断言有三个层面,一个是HTTP状态码的断言,另外一个是业务状态码的断言,最后是某一接口请求后服...

1.1K40
来自专栏Python爬虫实战

Python指南:文件处理

哪种文件格式最适合用于存储整个数据集——二进制、文本还是XML?这严重依赖于具体的上下文。

17810
来自专栏云计算教程系列

如何使用Grep

Grep是一个命令行实用程序,可以使用常见的正则表达式语法搜索和过滤文本。它无处不在,动词“to grep”已经成为“搜索”的同义词。它grep是一个有用的工具...

17330
来自专栏mySoul

Java入坑指南

最重要的api文档 https://docs.oracle.com/javase/10/docs/api/overview-summary.html

12720
来自专栏java一日一条

Java编程常见问题汇总2

这里有一个前提,就是文件大小不能讲JVM的heap撑爆。否则就等着OOM吧,尤其是在高并发的服务器端代码。最好的做法是采用Stream的方式边读取边存储(本地文...

10410
来自专栏余林丰

虚拟机类加载机制(2)——类加载器

《深入理解Java虚拟机》一书中将类的加载过程放到了类加载器前面一节,但在这里我想先讲“类加载器”。在上一篇类加载时机中我们用大量篇幅来讲解了类加载过程中的5个...

22760
来自专栏Java编程技术

一个有关定时生产与消费的问题

按照上面的逻辑看的话,每个队列里面最多有一个元素。其实不然,因为在多线程模型中每个线程占用cpu执行的时间是按照时间片来划分的,每个线程执行完自己的时间片后会被...

9210

扫码关注云+社区

领取腾讯云代金券