Base64是一种用64个字符(26个大写字母、26个小写字母、0-9、’+‘、’/‘)
来表示任意二进制数据的方法。
用记事本打开exe
、jpg
、pdf
这些文件时,我们都会看到一大堆乱码,因为二进制文件包含很多无法显示和打印的字符,所以,如果要让记事本这样的文本处理软件能处理二进制数据,就需要一个二进制到字符串的转换方法。Base64是一种最常见的二进制编码方法
对二进制数据进行处理,每3个字节一组,一共是3x8=24
bit,划为4组,每组正好6个bit
这样我们得到4个数字作为索引,然后查表,获得相应的4个字符,就是编码后的字符串
如果要编码的二进制数据不是3的倍数,最后会剩下1个或2个字节怎么办?Base64用\x00
字节在末尾补足后,再在编码的末尾加上1个或2个=
号,表示补了多少字节,解码的时候,会自动去掉
import base64
msg = '你好'
# 将字符串转为bytes
msgBytes = msg.encode('utf8')
base64Result = base64.b64encode(msgBytes)
print('编码后的字节码为: %s' % base64Result)
print('编码后的字符串为: %s' % base64Result.decode('utf8'))
bytesResult = base64.b64decode(b'5L2g5aW9')
print('解码后字节码为: %s' % bytesResult)
print('解码后字符串为: %s' % bytesResult.decode('utf8'))
'''
编码后的字节码为: b'5L2g5aW9'
编码后的字符串为: 5L2g5aW9
解码后字节码为: b'\xe4\xbd\xa0\xe5\xa5\xbd'
解码后字符串为: 你好
'''
import base64
# 以二进制读的方式打开图片test.jpg
with open('./test.jpg','rb') as file:
jpgBytes = file.read()
# 将图片的字节码转为base64字节码
base64Bytes = base64.b64encode(jpgBytes)
# 将base64字节码转为字符串,并添加图片前缀 data:image/jpg;base64,
base64Str = 'data:image/jpg;base64,%s' % base64Bytes.decode('utf8')
# 将base64字符串存入文件1.txt
with open('./1.txt','w') as f:
f.write(base64Str)
import base64
#读取1.txt中的base64字符串
with open('./1.txt','r') as file:
base64Str = file.read()
#获取文件类型
suf = base64Str[base64Str.find('/') + 1:base64Str.find(';')]
#截掉base64前缀 data:image/jpg;base64,
jpgBytes = base64.b64decode(base64Str[base64Str.find(',') + 1:])
#将图片字节码写入二进制文件中
with open('./test1.%s' % suf,'wb') as f:
f.write(jpgBytes)