Base64编码的真正目的是什么?


81

为什么我们有Base64编码?我是一个初学者,我真的不明白为什么您会将字节混淆成其他东西(除非是加密的)。在其中一本书中,我读到在无法进行二进制传输时,Base64编码非常有用。例如。当我们发布表单时,它会被编码。但是为什么我们将字节转换为字母呢?我们不能只是将字节转换为字符串格式而在两者之间留有空格吗?例如,00000001 00000004?还是0000000100000004因为字节总是成对出现8而没有任何空间?


11
因为您只是像使用base64一样将1字节变成8,而不是3变成4(如果内存正确地为我服务)。带宽是有限的。
Brian Roach 2012年

您会混淆位(每字节浪费8位)和字节,它们可能以任何形式分组。
DenysSéguret2012年

Answers:


108

Base64是一种将二进制数据编码为几乎每个计算机系统都知道的ASCII字符集的方式,以便传输数据而不会丢失或修改内容本身。例如,邮件系统无法处理二进制数据,因为它们需要ASCII(文本)数据。因此,如果您要传输图像或其他文件,由于其处理数据的方式,它将被损坏。

注意:base64编码既不是加密方法,也不是压缩数据的方法。实际上,base64编码的数据比原始数据大1.333倍。这只是确保传输过程中没有数据丢失或修改的一种方法。


5
Base64编码的数据正好比原始数据大1.333(3)倍+附加0-3个额外字符,具体取决于输入数据的模数4。这是因为每个base64编码字符存储着6位信息(64个不同字符) 。
也是

2
之前和之后的数据仍然是二进制的。那么为什么数据会丢失
Naresh Teli

12

Base64是一种机制,用于在仅允许可打印字符的介质上表示和传输二进制数据。它是“ Base Encoding”的最流行形式,使用的其他已知形式是Base16和Base32。

对Base64的需求源于将二进制内容附加到诸如图像,视频或任意二进制内容之类的电子邮件中的需要。由于SMTP [RFC 5321]仅在邮件中允许使用7位US-ASCII字符,因此需要使用7位ASCII字符来表示这些二进制八位字节流。

希望这能回答问题


3

Base64或多或少是一种紧凑的传输方式(实际上是编码,但目标是传输)任何类型的二进制数据。

参见http://en.wikipedia.org/wiki/Base64

“一般规则是选择一组64个字符,这些字符既是大多数编码通用的子集的一部分,又可以打印。”

这是一个非常普遍的目的,通常的需求是不要浪费过多的空间。

从历史上看,它是基于以下事实:(几乎)所有编码都有一个公共子集,用于将字符存储到字节中,并且在简单数据传输过程中,很多2 ^ 8个可能的字节都有丢失或转换的风险(例如,粘贴-电子邮件发送-电子邮件接收-复制-粘贴序列)。

(请重定向支持Brian的评论,我只是想使其更加完整,希望更加清晰)。


不,这还为时过早,我不想充实一个完整的答案。很好
Brian Roach 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.