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

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

import requests
import plistlib

curl = "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 chardet
coding = 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 requests
import plistlib
import chardet

curl = "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

你可能感兴趣的:(python,编码,plist,xml)