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
- python解析plist文件gb2312编码格式到utf-8编码格式
- UTF-8,GB2312等编码格式详解
- ASP UTF-8页面乱码+GB2312转UTF-8 +生成UTF-8格式的文件(编码)<
- 多线程批量转换文件编码, 从GBK, GB2312编码转换到UTF-8编码(Python)
- 编码格式(关于utf-8,gb2312,gbk,big5等)
- Python write 写文件编码格式指定为utf-8
- utf-8编码格式
- utf-8编码格式
- ASP动态网页下UTF-8页面乱码+GB2312转UTF-8 +生成UTF-8格式的文件(编码)
- python设置编码格式utf-8
- 编码格式要统一,Asp.net把UTF-8编码转换为GB2312编码
- vba 读写文件,utf-8编码格式
- Unicode, UTF-8, ASCII文件编码格式
- 如何处理提交页面是GB2312编码格式,接收页面是UTF-8格式?
- 还原utf-8编码格式
- UTF-8 可变编码格式
- UTF-8编码格式转换
- 在ASP中自动检测文件的编码格式,支持UTF-8、GB2312、UTF-7、Unicode、Unicode Swap等格式的检测
- HDU 5441 Travel(2015 ACM/ICPC Asia Regional Changchun Online)
- xxx cannot be resolved to a type 错误解决方法
- 模拟电子技术之放大电路及各组态的性能介绍
- [Linux C编程]Linux文件锁
- 7.9指向函数的指针
- python解析plist文件gb2312编码格式到utf-8编码格式
- Android AP模式下获取SSID/PASSWORD
- Flexigrid系列使用教程(一)前台代码及参数说明
- Instant Run requires 'Tools | Android | Enable ADB integration' to be enabled问题
- REST
- Opencv2.4.9交叉编译+拍照
- dip 和 px的相互转换
- Java Socket网络编程-
- btrfs 基础知识