python中让人抓狂的编码问题

上一篇博客,我在爬虫的时候,已经提到了总遇到编码报错,UnicodeDecodeError, codec can’t , 这种类似的提示,导致程序无法继续下去。
于是,我开始仔细调研,查找资料,今天在这里总结下python中编码解码的情况,以及我遇到的一些坑,让大家以后少走弯路。

1.python环境下的编码

用python编程时,会遇到三个方面的编码:
(1)python程序文件的编码
(2)python开发环境的编码
(3)python读取写入文件、网页时,这些外部文件的编码

下面分别从python2、python3来说明以上编码

python2,在解决编码问题上,比较复杂;python3在2的基础上,优化了编码部分,在写程序时,使编码问题很简单就解决。

程序文件编码

指创建这个文件时的编码,比如python2创建时默认文件编码是ascii, 可以用一些编辑器如notpad txt
查看文件编码类型; 因此,想使用utf-8编码时,开头一般会加上#coding=utf-8

程序运行环境的编码

python2环境默认的是ascii编码, python3默认的是utf-8编码。
因此,python2写程序时,要加上运行环境要想使用utf-8的话, 一般要加上几句:
import sys
reload(sys)
sys.setdefaultencoding(‘**重点内容**utf-8’)

读取外部文件的编码

这个是比较复杂的部分。
首先要清楚你读取的外部文件是什么类型。
这个时候要用到 编码encode, 解码decode。

python2的编码解码:找一个统一的中间编码;
encode:将unicode编码转为其它类型的编码;
decode:将其它类型的编码转为unicode编码;可以通过这些转换方便之后程序的书写。

python3:python3默认的是utf-8编码, 并且python3把 字节流bytes, 字符串str分的很清楚,可以方便转换。
encode:将字符流转换为机器编码的字节流,全都是16进制;
decode:将16进制的字节流转换为人能识别的字符串。

python3因为,编码问题已经解决了很多,按照正常程序读取写入, 基本不会出现问题。
读取文件 open(, ,encoding=’utf-8’), 设置读进来的时候是什么格式。

我经常碰到的是文件里有特殊字符,读取到中间时,读不下去了,导致读取报错。 这时候我的解决办法是: open(’rb‘)按照字节流去读取,
可以保证能够读进来。 然后,python3 bytes 和str转换很方便, 转换成字符串就可以去做其它事情了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值