python如何分清encode和decode

<本文示例用的python2.7,以及我的破输入法打不出中文标点,很迷…望诸位道友忍耐下>

一.简述

encode() 是编码 decode()是解码 两个函数参数相同都是两个
语法:

str.encode(encoding=‘UTF-8’,errors=‘strict’)
str.decode(encoding=‘UTF-8’,errors=‘strict’)

第一个参数是所需要的编码或者解码的格式,第二个参数是错误处理方案,默认为strict,意思是如果当前函数报错了,那么我们用抛出一个UnicodeError的方式处理它

一个新鲜出炉的真实案例:

>a = '中文'
>a.decode('gb2312')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'gb2312' codec can't decode bytes in position 2-3: illegal multibyte sequence

当然errors也有其他的参数,比较常用的举个例子ignore,忽略错误,编/解出多少就保留多少

> a.decode('gb2312','ignore')
u'\u6d93'
> print a.decode('gb2312','ignore')

以上是有关这两个函数的基本用法,当然如果能依靠上面那些就分得清这两个东西那你也不会搜到我这篇文章了.那么如何区分呢?

还是要从为什么python会有这么烦人的编码问题存在说起 ------------
python的内置方法会时常把字符串换成unicode编码,而我们想要其他的,所以要转成其他的
现在方法来了

二.记忆方法

1.感知法:
你是否觉得在你过去写过的千千万万行代码中python中encode出现的频率比decode高?
那是因为,你可以认为encode就是服务于unicode编码的:

unicode编码.encode(‘其他编码1’) = 其他编码1

其他格式编码1.decode(‘其他格式编码1’) = unicode编码

其他格式编码1.decode(‘其他格式编码1’) .encode(‘其他格式编码2’) 这也是一种常用的结构,表示先把编码1解码成unicode再编码成编码2

来一段例子生动一下

>import chardet    #(python可引用的,有概率检查出编码类型的库)
>a = u'中文'
>b = a.encode('utf8')
>b
'\xe4\xb8\xad\xe6\x96\x87'  # 结果
>chardet.detect(b)
{'confidence': 0.7525, 'encoding': 'utf-8'}  # 结果
#此时的b为utf-8,所以我们直接用b去decode
>b.decode('utf8')
u'\u4e2d\u6587'  # 结果
>b.decode('utf8').encode('gbk')  #先把utf-8解码成unicode才能再编码成gbk
'\xd6\xd0\xce\xc4'   #结果

至于各个编码类型之间的区别和编译的方式那是一个很大的话题,就要靠道友们到别处查询了

2.联合记忆
已知英语中的元音字母[a e i o u ]
我们可以简单的记忆e和u捆绑在一起,取encode服务于unicode的意思(encode是unicode才能 “.” 出来的方法/函数),二者首字母e和u都是元音字母,以此辅助记忆

当然最好的办法还是要多用,或者也逼自己写篇博客,说不定就记住啦(smile~)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值