为什么只有base64而不是base128用于在Web上传输二进制数据?ASCII字符集具有128个字符,理论上可以表示基数为128,但大多数情况下仅使用base64,而不使用base128。
为什么只有base64而不是base128用于在Web上传输二进制数据?ASCII字符集具有128个字符,理论上可以表示基数为128,但大多数情况下仅使用base64,而不使用base128。
Answers:
问题在于,ASCII字符集中的至少32个字符是“控制字符”,可以由接收终端解释。例如,有BEL(铃)字符使接收终端发出提示音。有SOT(传输开始)和EOT(传输结束)字符,它们的作用恰如其名。并且不要忘记字符CR和LF,它们对于如何将数据结构序列化/展平到流中可能具有特殊的含义。
Adobe创建了Base85编码,以在ASCII字符集中使用更多字符,但AFAIK受专利保护。
因为这128个字符中的某些是不可打印的(主要是那些位于代码点0x20以下的字符)。因此,它们不能可靠地以线的形式通过电线传输。而且,如果超出代码点128,则可能会出现编码问题,因为跨系统使用的编码不同。
前32个字符是控制字符绝对不相关,因为您不必使用它们来获得128个字符。我们有256个字符可供选择,只有前32个是控制字符。剩下192个字符,因此在不使用控制字符的情况下完全可以有128个字符。
原因是:它必须看起来一样,而且无论在何处都可以复制和粘贴。因此,必须有在所有论坛,聊天,电子邮件等上都可以相同显示的字符。这意味着我们不能使用字符,论坛/聊天/电子邮件客户端通常可能会使用这些字符进行格式化或忽略。无论字体,语言和区域设置如何,它都必须是相同的字符。
这就是原因!
Base64很常见,因为它解决了许多问题(几乎可以想到的所有地方都可以使用)
您无需担心传输是否是8位干净的。
编码中的所有字符都是可打印的。您可以看到它们。您可以复制并粘贴它们。您可以在URL(特定变体)中使用它们。等等
固定的编码大小。您知道m
字节总是可以编码为n
字节。
每个人都听说过-它得到了广泛支持,有很多库,因此很容易进行互操作。
Base128没有所有这些优点。
看起来它是8位整洁的-但请记住,base64使用65个符号。如果没有带外字符,则无法获得固定编码大小的好处。如果您使用带外字符,则无法再进行8位清除。
但是,这并非全都是负面的。
base128比base64更易于编码/解码-您只需使用移位和掩码即可。对于嵌入式实现可能很重要
通过使用更多可用位,base128比base64更加有效地使用了传输。
人们确实使用base128-我现在正在使用它做一些事情。只是不那么普遍。
esaji是对的。Base64用于对二进制数据进行编码,以使用仅要求文本的协议进行传输。就在Wiki条目中。
检出base128 PHP类。使用ISO 8859-1字符集进行编码和解码。