应用场景以下:从api下载数据,json解析,存入字典,按期保存。重启程序须要加载保存的文本。python
问题1:json中都是unicode串,存到文本里都是些\u***json
解决:关闭ensure_ascii开关api
json.dump(pub.listData,fp,ensure_ascii=False)编码
问题2:字典关键字用的数字,从文本load后变为unicode串excel
解决:code
走了一点弯路,网上的解决方法,都是转换,把串转回utf-8,方法是utf-8
def byteify(input):ci
if isinstance(input, dict):element
return {byteify(key):byteify(value) for key,value in input.iteritems()}unicode
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')
市场代码