
文章插图
python2 可以以string-escape和unicode-escape方式解码 。
# -*- coding: UTF-8 -*-# python2with open('a.txt','r') as f: lines = f.readlines() print(lines)#读取后会加上转义 ['\xd6\xd0\xce\xc4rn', '\u4e2d\u6587'] for line in lines:if '\x' in line:print(line.decode('string-escape'))if '\u' in line:print(line.decode('unicode-escape'))
python3 可以参考如下方式处理 。# -*- coding: UTF-8 -*-import codecswith open('a.txt','r',encoding='utf-8') as f: lines = f.readlines() print(lines) for line in lines:if '\x' inline:bline = bytes(bytearray.fromhex(line.strip().replace('\x','')))print(bline.decode('gbk'))#\xd6\xd0\xce\xc4 是"中文"gbk格式的字符码if '\u' in line:print(codecs.decode(line,'unicode_escape'))
七、python2 json的问题存在如下代码 。# -*- coding: UTF-8 -*-# python2import jsona = {'a':'test','语言':'中文'}with open('a.txt','a+') as f: f.write(json.dumps(a))
运行之后,json.dumps会将中文以unicode的字符码形式dump,并不是真正的中文,需要指定ensure_ascii=False参数来dump真正的中文 。json.dumps(a,ensure_ascii=False)
如下,dumps后文件为utf-8格式,如果读取进行json.loads,得到的字典”键”和”值”就都会是unicode类型的 。
文章插图
# -*- coding: UTF-8 -*-import jsonwith open('a.txt','r+') as f: print(json.loads(f.read()))
结果如下 。
文章插图
需要对获取到的字典”键”和”值”进行解码的话,这里可以参考一段代码处理 。
def unicode_convert(input): if isinstance(input, dict):return {unicode_convert(key): unicode_convert(value) for key, value in input.items()} elif isinstance(input, unicode):return input.encode('utf-8') else:return input
八、总结4月20日,Python2的最后一个版本发布:2.7.18 。可以说python2已是过去式,python3才是未来 。可为什么文章大部分内容却还是python2的呢?一是确实python2的字符编码问题多,解决这些问题能更好的理解python编码机制;二是即便python2不再有,但编码问题一定一直会存在,不管是python自己生成处理的数据还是其它源数据 。从解决python2的编码问题到了解python2与python3的差异,总结出以下解决编码问题的关键点,如有不当,还望指正 。1.python2的默认编码是ascii,python3则是utf-8 。
2.python文件开头的编码声明声明的是当前脚本内字符串的编码,要避免编码错误,需要统一数据源,声明的编码类型,数据输出三者的编码 。
3.python2没有将str和bytes型数据做明显的区分,是一种隐式的混用,并且python2处理str类型时优先将其视为bytes 。str/bytes/unicode三者关系:str(bytes)—decode—>unicode—encode—>str(bytes) 。
4.python3对str和bytes型数据作了明显区分,str表示文本,默认就是原生unicode的utf-8编码格式,bytes型数据就表示二进制数据 。bytes/str/unicode三者关系:bytes—decode—>str(unicode)—encode—>bytes 。
5.python2在识别目录、open创建、读取文件时均以系统ANSI编码识别的 。
6.python3 open文件操作若不指定编码,则默认以系统ANSI编码写入、读取文本 。
推荐阅读
- 要成为一名成功的开发人员,您应该放弃的22件事
- 服务器之间实现免密登录的简易教程
- 真的没想到,word就能一键制作证件照,换背景颜色,涨知识了
- 滇红金芽茶的先容,滇红茶做出爱不释口的烤墨鱼
- 茶叶的保健功效介绍,柚子茶的功效与禁忌
- 促消化刮油的大麦茶,冬季进补调理肠胃温热大麦茶促消化
- 茶氨酸是什么,茶树菇的功能是什么
- Linux第8课:Redirection的4类7种方法,实现文件的呼叫转移
- 一个不起眼的功能,可以一键合并拆分单元格
- 有更快的WiFi更有家庭云服务——360 WiFi6