【发布时间】:2011-04-02 01:38:35
【问题描述】:
当需要对二进制数据进行编码时,通常使用 Base64 编码方案,这些二进制数据需要通过旨在处理文本数据的媒体进行存储和传输。这是为了确保数据在传输过程中保持完整而不被修改。
但是数据不是总是以二进制形式存储/传输的,因为我们机器的内存存储二进制,而这仅取决于您如何解释它吗?因此,无论您将位模式010011010110000101101110 编码为ASCII 中的Man 还是Base64 中的TWFu,您最终都会存储相同的位模式。
如果最终的编码是零和一,并且每台机器和媒体都可以处理它们,那么数据表示为 ASCII 还是 Base64 又有什么关系?
“旨在处理文本数据的媒体”是什么意思?他们可以处理二进制 => 他们可以处理任何事情。
谢谢大家,我想我现在明白了。
当我们发送数据时,我们无法确定数据是否会以与我们预期相同的格式进行解释。因此,我们发送以双方都能理解的某种格式(如 Base64)编码的数据。这样,即使发送方和接收方对相同事物的解释不同,但由于它们在编码格式上达成一致,数据也不会被错误地解释。
如果我想发送
Hello
world!
一种方法是像 ASCII 一样发送它
72 101 108 108 111 10 119 111 114 108 100 33
但字节 10 可能无法正确解释为另一端的换行符。所以,我们使用 ASCII 的一个子集来像这样编码它
83 71 86 115 98 71 56 115 67 110 100 118 99 109 120 107 73 61 61
以相同数量的信息传输更多数据为代价确保接收器可以按预期方式解码数据,即使接收器碰巧对字符集的其余部分有不同的解释。
【问题讨论】:
-
历史背景:电子邮件服务器曾经是 7 位 ASCII。他们中的许多人会将高位设置为 0,因此您只需发送 7 位值。见en.wikipedia.org/wiki/Email#Content_encoding
-
您可以(或历史上可以)仅依赖 ascii 的低 7 位在机器之间是相同的 - 或在机器之间可翻译,尤其是当并非所有机器都使用 ascii 时
-
@Martin,你在开玩笑。 Perl 很难阅读,但 base64 根本不可读。
-
@Lazer 你的图片丢失了
-
@Lazer,“但字节 10 可能无法正确解释为另一端的换行符。”为什么?双方已就 ASCII 达成一致,他们必须正确解释它!
标签: algorithm character-encoding binary ascii base64