Base64是把3个字节变为4个字节,所以,Base64编码的长度永远是4的倍数
import base64
# base64 编码 接收的参数只能是字节
a = base64.b64encode("哈哈".encode("utf-8"))
print(a)
# 输出结果: b'5ZOI5ZOI'
b = base64.b64decode(a)
print(b)
# 输出结果: b'\xe5\x93\x88\xe5\x93\x88'
print(b.decode("utf-8"))
# 输出结果: 哈哈
c = base64.b64encode(b'i\xb7\x1d\xfb\xef\xff')
print(c)
# 输出结果: b'abcd++//'
d = base64.urlsafe_b64encode(b'i\xb7\x1d\xfb\xef\xff')
print(d)
# 输出结果: b'abcd--__'
print(base64.b64encode(b"abcd--__"))
e = base64.urlsafe_b64decode('abcd--__')
print(e)
# 输出结果: b'i\xb7\x1d\xfb\xef\xff'
Python base64模块真正用的上的方法只有8个(4组)。
-
1、encode, decode一组, 专门用来编码和解码文件的, 也可以对StringIO里的数据做编解码;
-
2、encodestring, decodestring一组, 专门用来编码和解码字符串;
-
3、b64encode和b64decode一组,用来编码和解码字符串,并且有一个替换符号字符的功能
-
这个功能是这样的: 因为base64编码后的字符除 了英文字母和数字外还有三个字符 + / =
-
其中=只是为了补全编码后的字符数为4的整数; 而+和/在一些情况下需要被替换的; b64encode和b64decode正是提供了这样的功能。
至于什么情况下+和/需要被替换,最常见的就是对url进行base64编码的时候。
-
4、urlsafe_b64encode和urlsafe_b64decode 一组, 这个就是用来专门对url进行base64编解码的,
实际上也是调用的前一组函数(b64encode和b64decode)
-
注意在python2之前base64模块函数的参数可以直接使用字符串,python3以后只能适用二进制字符串
import base64 # from io import StringIO from io import BytesIO
python2版本
str1 = “this is a test”
对字符串编码
encodeStrTest = base64.encodestring(str1)
print(encodeStrTest)
对字符串解码
print(base64.decodestring(encodeStrTest))
# python3版本
# 对字符串编码
print(10000000)
encodeStrTest = base64.encodestring(b"this is a test")
print(encodeStrTest)
# 对字符串解码
print(base64.decodestring(encodeStrTest))
# python2版本
# str2 = "Hello, World!"
# strIO = StringIO()
# strIO.write(str2)
# encodeTest = StringIO()
# decodeTest = StringIO()
# # 对StringIO内的数据进行编码
# strIO.seek(0)
# base64.encode(strIO, encodeTest)
# print(encodeTest.getvalue())
# 对StringIO内的数据进行解码
# encodeTest.seek(0)
# base64.decode(encodeTest, decodeTest)
# print(decodeTest.getvalue())
# python3版本
str2 = "Hello, World!"
binIO = BytesIO()
binIO.write(str2.encode("utf-8"))
encodeTest = BytesIO()
decodeTest = BytesIO()
# 对BytesIO内的数据进行编码
binIO.seek(0)
base64.encode(binIO, encodeTest)
print(encodeTest.getvalue())
# 对BytesIO内的数据进行解码
encodeTest.seek(0)
base64.decode(encodeTest, decodeTest)
print(decodeTest.getvalue())
url = "http://www.cnblogs.com/sislcb/archive/2008/11/28/1342824.html"
# 对url的字符串进行编码
urlEncodeTest = base64.urlsafe_b64encode(url.encode("utf-8"))
print(urlEncodeTest) # b'aHR0cDovL3d3dy5jbmJsb2dzLmNvbS9zaXNsY2IvYXJjaGl2ZS8yMDA4LzExLzI4LzEzNDI4MjQuaHRtbA=='
# 对url进行解码
print(base64.urlsafe_b64decode(urlEncodeTest)) # b’http://www.cnblogs.com/sislcb/archive/2008/11/28/1342824.html’