详解Python中使⽤base64模块来处理base64编码的⽅法base64模块是⽤来作base64编码解码的。这种编码⽅式在电⼦邮件中是很常见的。
它可以把不能作为⽂本显⽰的⼆进制数据编码为可显⽰的⽂本信息。编码后的⽂本⼤⼩会增⼤1/3。
闲话不说了,base64模块真正⽤的上的⽅法只有8个,分别是encode, decode, encodestring, decodestring,
b64encode,b64decode, urlsafe_b64decode,urlsafe_b64encode。他们8个可以两两分为4组,encode,decode⼀组,专门⽤来编码和解码⽂件的,也可以对StringIO⾥的数据做编解码;encodestring,decodestring⼀组,专门⽤来编码和解码字符串;b64encode和b64decode⼀组,⽤来编码和解码字符串,并且有⼀个替换符号字符的功能。这个功能是这样的:因为base64编码后的字符除了英⽂字母和数字外还有三个字符 + / =, 其中=只是为了补全编码后的字符数为4的整数,⽽+和/在⼀些情况下需要被替换的,b64encode和b64decode正是提供了这样的功能。⾄于什么情况下+和/需要被替换,最常见的就是对url进⾏base64编码的时候。urlsafe_b64encode和urlsafe_b64decode ⼀组,这个就是⽤来专门对url进⾏base64编解码的,实际上也是调⽤的前⼀组函数。
基本⽤法
⾸先准备⼀个64个字符的数组[‘A','B','C', … , ‘1', ‘2', … , ‘+']
字符串转数组编码方式然后对⼆进制数据进⾏处理, 每三个字节(byte)⼀组, ⼀共是3x8=24, 划为4组,每组6bit.这样我们得到4个数字作为索引, 然后查表获得相应的4个字符, 就是编码后的字符串.
如果编码的⼆进制数不是3的倍数怎么办,base64在 00在末尾不⾜后,在代码的末尾添加1~2个=号,解码是⾃动去掉
import base64
me = base64.b64encode("mink")
print me            # print 'bWluaw=='
会把少的字符⽤=号补上
print base64.b64decode(me)  # print 'mink'
可以解码得到原有的字符串
urlsafe_b64encode 和 urlsafe_b64decode
base64的还提供⽤于url的编码⽅法urlsafe_b64encode 和urlsafe_b64decode.
me = base64.urlsafe_b64encode('i b7 1d fb ef ff')
print me            # print 'abcd--__'
print base64.urlsafe_b64decode(me) print 'abcd++//'
因为base64编码后+和-可能会出现在字符中,所以通过urlsafe的⽅法把+转换为-,/转化为_.
由于=字符也可能出现在Base64编码中,但=⽤在URL Cookie⾥⾯会造成歧义,很多Base64编码后会把=去掉.去掉=后怎么解码呢?因为Base64是把3个字节变为4个字节,所以Base64编码的长度永远是4的倍数.因此需要加上=把Base64字符串的长度变为4的倍数,就可以正常解码了.
综合⽰例
#-*- encoding:gb2312 -*-
import base64
import StringIO
a = "this is a test"
b = destring(a) # 对字符串编码
print b
print base64.decodestring(b) # 对字符串解码
c = StringIO.StringIO()
c.write(a)
d = StringIO.StringIO()
e = StringIO.StringIO()
c.seek(0)
value()
d.seek(0)
base64.decode(d, e) # 对StringIO内的数据进⾏解码
value()
a = "this is a +test"
b = base64.urlsafe_b64encode(a) # 进⾏url的字符串编码
print b
print base64.urlsafe_b64decode(b)
上⾯的encode函数和decode函数的参数其实还可以是⽂件对象的,那的象这样:f1 = open('', 'r')
f2 = open('', 'w')
f1.close()
f2.close()

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。