说明
《Python 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
Base64 是一种用 64 个字符来表示任意二进制数据的编码方法。Python 标准库 base64 提供了将二进制数据编码为可打印的 ASCII 字符以及将这种编码格式解码回二进制数据的函数。当计算机将Base64字符转换为二进制时,每个Base64字符代表6位信息。这不是加密算法,不应用于安全目的。
您是否曾经通过电子邮件收到过某个人的 PDF 或图像文件,但在打开时却看到奇怪的字符?如果您的电子邮件服务器仅设计用于处理文本数据,则可能会发生这种情况。包含二进制数据的文件(表示图像等非文本信息的字节)在传输和处理到纯文本系统时很容易损坏。Base64编码允许我们将包含二进制或文本数据的字节转换为ASCII字符。通过对数据进行编码,我们提高了各种系统正确处理数据的机会。
Base64 是一种基于 64 个可打印字符来表示二进制数据的表示方法。由于log(2)64=6,所以每6个比特为一个单元,对应某个可打印字符。3个字节相当于24个比特,对应于4个Base64单元,即3个字节可由4个可打印字符来表示。在Base64中的可打印字符包括字母A-Z、a-z、数字0-9,这样共有62个字符,此外两个可打印符号在不同的系统中而不同。一些如uuencode的其他编码方法,和之后BinHex的版本使用不同的64字符集来代表6个二进制数字,但是不被称为Base64。
Base64常用于在通常处理文本数据的场合,表示、传输、存储一些二进制数据,包括MIME的电子邮件及XML的一些复杂数据。
日常中,我们用记事本等纯文本打开 exe、jpg、pdf 这些文件时,会看到一大堆乱码,因为二进制文件包含很多无法显示和打印的字符,所以,如果要让记事本这样的文本处理软件能处理二进制数据,就需要一个二进制到字符串的转换方法。Base64是一种最常见的二进制编码方法。
简单理解:将任何二进制的文件转换为 ASCII 的纯文本编码,这样就可以在任何兼容 ASCII 纯文本协议的地方完好无损地传输、保存数据,不用担心文件因编码解码而损坏。为了减少编码元素,它是从 ASCII 中选取的 64 个子集,全是可显示字符,base64 意为从这 64 个字符为底,又称基底64。Base64是一种通过查表的编码方法,不能用于加密。
Base64编码是将字节转换为ASCII字符的一种类型。在数学中,数字系统的基础是指有多少不同的字符代表数字。这种编码的名称直接来自于基的数学定义——我们有64个代表数字的字符。
Base64字符集包含:
我们将通过转换文本数据来说明Base64编码的工作原理,因为它比各种二进制格式更标准。如果我们要对字符串进行Base64编码,我们将遵循以下步骤:
以下是一个最为简单的编码和解码过程:
import base64
# 编码
s = "盖若是一个好网站"
# 一个 bytes-like 对象
encoder = base64.b64encode(s.encode("utf-8"))
encoder # byte类型
# b'55uW6Iul5piv5LiA5Liq5aW9572R56uZ'
# 解码为 utf-8 字符串
str_encoder = encoder.decode('utf-8')
str_encoder # str类型
# '55uW6Iul5piv5LiA5Liq5aW9572R56uZ'
# 解码
decoder = base64.b64decode(str_encoder)
decoder.decode('utf-8')
# '盖若是一个好网站'
对文件进行编码成 base64:
import base64
with open('logo.png', 'rb') as binary_file:
binary_file_data = binary_file.read()
base64_encoded_data = base64.b64encode(binary_file_data)
base64_message = base64_encoded_data.decode('utf-8')
print(base64_message)
# iVBORw0KGgoAAA...5CYII=
base64 解码保存为文件:
import base64
base64_img = 'iVBORw0KGgoAAAANSU...II='
base64_img_bytes = base64_img.encode('utf-8')
with open('decoded_image.png', 'wb') as file_to_save:
decoded_image_data = base64.decodebytes(base64_img_bytes)
file_to_save.write(decoded_image_data)
在对二进制文件进行base64解码时,必须知道正在解码的数据类型。
我们看一下本模块的其他方法:
import base64
dir(base64)
'''
...
'_urlsafe_encode_translation',
'a85decode',
'a85encode',
'b16decode',
'b16encode',
'b32decode',
'b32encode',
'b32hexdecode',
'b32hexencode',
'b64decode',
'b64encode',
'b85decode',
'b85encode',
'binascii',
'bytes_types',
'decode',
'decodebytes',
'encode',
'encodebytes',
'main',
're',
'standard_b64decode',
'standard_b64encode',
'struct',
'test',
'urlsafe_b64decode',
'urlsafe_b64encode'
...
'''
base64 库提供了一组简单但强大的工具,用于二进制数据和文本之间的转换,使得在处理和传输数据时更加方便和高效。
更新时间:2024-07-04 19:55:46 标签:python 编码 base64