为什么要使用Base64?

时间:2016-12-24 17:40:23

标签: encoding utf-8 base64

通过网络发送时,Base64编码会将输入大小增加约37%。如果是这种情况,为什么不使用UTF-8编码内容(比如.jpg文件)。这样文件的大小不会增加吗?

例如:如果我想发送字符串“asd”,则UTF-8编码版本将 3字节,而Base64编码版本将 4字节

2 个答案:

答案 0 :(得分:1)

Base64的目的是允许通过无法依赖的通信通道传输二进制数据,以端到端地传输所有可能的字节值。特别是,使用Base64时,无法轻松可靠地传输128到255之间的字节值。

相比之下,UTF-8用于在一个通道上编码Unicode,可以假设它可以端到端地可靠地传输所有可能的字节值(有时称为" 8位清洁"频道)。

因此,您的提案存在两个问题。首先,JPEG是二进制数据,而不是Unicode,所以UTF-8并不合适:如果你将JPEG编码为UTF-8"以明显的方式(将JPEG视为一个字节序列,每个字节与U + 00到U + FF的Unicode代码点相关联,然后将这些代码点编码为UTF-8),它将使所有字节的大小加倍值为128-255,因此您平均可以将文件大小增加50%。其次,即使您这样做,生成的编码JPEG也需要一个8位清洁的通信通道,因此无论如何都不能在需要Base64的情况下使用。

编辑:在评论中,您询问我们是否无法使用"输入二进制文件 - > 7位ASCII编码 - >通过电线发送"节省空间。我假设你的意思是将输入二进制文件作为一个长的位流并将它们分成7位块并将它们作为ASCII发送?是的,这可以完成并且只会将大小增加14%,但它不会非ASCII字节值128-255导致问题。在MIME电子邮件中,最常使用Base64,从平台到平台的行结束约定(回车,换行或组合)的差异,标准中规定的某些历史行长度限制等等意味着并非所有可以安全地使用ASCII字符(字节0-127)。 Base64不是兼容性和效率之间可能的最佳权衡,但它非常接近。

答案 1 :(得分:0)

Base64通常在实例中用于表示文本格式的任意二进制数据,它具有33.3%的开销,但比具有50%开销的十六进制表示法更好。
utf-8是一种文本编码,它不能表示任何二进制数据,这是一个jped文件 几乎没有理由将二进制数据转换为文本以通过线路传输它,所以很多时候人们这样做是因为他们不知道更好。 使用它的唯一原因是如果你从api或库中获取它。