zoukankan      html  css  js  c++  java
  • 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的Libsite-packages文件夹下新建一个sitecustomize.py,内容为:

    # encoding=utf8 

    import sys 

    reload(sys) 

    sys.setdefaultencoding('utf8')

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

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

    [18]:'xc2xf2xd2xbbxc1xbf'

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

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

    市场代码

  • 相关阅读:
    【转】探秘Java中的String、StringBuilder以及StringBuffer
    【转】深入剖析Java中的装箱和拆箱
    谈谈我对多态的理解
    mysql组合索引之最左原则
    白衣浅谈各个集合的特性
    Linux 下的两个特殊的文件 -- /dev/null 和 /dev/zero 简介及对比
    内网穿透工具的原理与开发实战
    nohup命令说明-转载
    springboot 启动jar正确方式
    maven版本仲裁原则
  • 原文地址:https://www.cnblogs.com/jetz/p/6911063.html
Copyright © 2011-2022 走看看