假设您有一个想要通过网络传输的二进制图像文件。您很惊讶对方没有正确接收该文件 - 该文件只是包含奇怪的字符!
嗯,您似乎试图以原始位和字节格式发送文件,而所使用的媒体是为流文本而设计的。
避免此类问题的解决方法是什么?答案是Base64编码。在本文中,我将向您展示如何使用 Python 对二进制图像进行编码和解码。该程序被说明为一个独立的本地程序,但您可以将该概念应用于不同的应用程序,例如将编码图像从移动设备发送到服务器以及许多其他应用程序。
什么是 Base64?
在深入了解本文之前,让我们先定义一下 Base64 的含义。
Base64 是一种将 8 位二进制数据编码为可以用 6 位表示的格式的方法。仅使用字符 A-Z
、a-z
、0-9
、+
、 /
用来表示数据,其中 =
用于填充数据。例如,使用此编码,三个 8 位字节将转换为四个 6 位组。
术语 Base64 取自多用途互联网邮件扩展 (MIME) 标准,该标准广泛用于 HTTP 和 XML,最初是为编码电子邮件附件以进行传输而开发的。
我们为什么使用 Base64?
Base64 对于二进制数据表示非常重要,因此它允许二进制数据以看起来和充当纯文本的方式表示,这使得存储在数据库中、在电子邮件中发送或在其他应用程序中使用更加可靠。基于文本的格式,例如 XML。 Base64 主要用于以 ASCII 字符串格式表示数据。
正如本文介绍中提到的,如果没有 Base64,有时数据将根本无法读取。
Base64 编码
Base64 编码是将二进制数据转换为 64 个字符的有限字符集的过程。如第一节所示,这些字符是 A-Z
、a-z
、0-9
、 +
和 /
(数一数,你注意到它们加起来是 64 了吗?)。该字符集被认为是最常见的字符集,被称为 MIME 的 Base64。它使用 A-Z
、a-z
和 0-9
作为前 62 个值,以及 +
和 /
用于最后两个值。
Base64编码的数据最终会比原始数据更长,因此如上所述,每3个字节的二进制数据,至少有4个字节的Base64编码数据。这是因为我们将数据压缩成更小的字符集。
您是否见过如下所示的原始电子邮件文件的一部分(很可能源自未发送的电子邮件)?如果是这样,那么您已经看到了 Base64 编码的实际应用! (如果你注意到最后有 =
,你可以断定这是 Base64 编码,因为编码过程中使用了等号进行填充。)
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: base64
2KfZhNiz2YTYp9mFINi52YTZitmD2YUg2YjYsdit2YXYqSDYp9mE2YTZhyDZiNio2LHZg9in2KrZ
h9iMDQoNCtij2YjYryDZgdmC2Lcg2KfZ