python解析plist文件gb2312编码格式到utf-8编码格式

来源:互联网 发布:2017年1月进出口数据 编辑:程序博客网 时间:2024/06/10 04:44

        最近一段时间,在用python访问http request请求,返回plist(xml)文件后,遇到gb2312编码格式解析时遇到了一些问题,最后通过上网搜索得以解决,现在特系统分析以下。首先使用http request请求,获得访问数据r,其类型为class ‘request.models.Response’,可以使用type(r)查看。

import requestsimport plistlibcurl = "http://******"r = requests.get(curl)d = plistlib.readPlistFromString(r.content)

       由以上字符串到dict的解析过程中,如果r.content的格式是utf-8,那么该语句运行正确。如果当r.content的格式是一些特殊编码(如gb2312)时,python会报错,此时需要将编码格式转换到utf-8。查看r.content编码格式,需要使用chardet库,下载链接https://pypi.python.org/pypi/chardet,方法如下:

import chardetcoding = chartdet.detect(r.content)print coding

        将固定编码转换为utf-8编码格式的方法如下,其中coding是通过上文获取,decode(coding['encoding'])将r.content从现有的编码格式解码成Unicode,encode('utf-8')将r.content.decode(coding['encoding'])的编码格式从unicode重新编码成utf-8格式。

str = r.content.decode(coding['encoding']).encode('utf-8')
现在就可以使用plistlib库对r.content进行解析了,全部代码如下:

import requestsimport plistlibimport chardetcurl = "htttp:******"r = requests.get(curl)coding = chartdet.detect(r.content)str = r.content.decode(coding['encoding']).encode('utf-8')d = plistlib.readPlistFromString(str)print d


相关参考:

1.unicode与utf-8区别,http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html

2.检测字符串编码及chardet使用,https://segmentfault.com/q/1010000000185278

1 0
原创粉丝点击