【问题标题】:Questions about Base64 encoding关于Base64编码的问题
【发布时间】:2019-12-11 21:39:34
【问题描述】:

我有 3 个关于 base64 的问题:

1) base64 编码目的是二进制转文本。文本不会以二进制形式通过网络发送吗?那有什么好处呢?

2) 过去他们使用 7 位通信系统,现在是 8 位。那为什么我们现在还在用呢?

3) 它如何增加尺寸?我只取 28 位的 3 字节并将它们重新排列为 6 位的 4 字节,但它们总共仍然是 28 位?

【问题讨论】:

    标签: encoding base64 urlencode tobase64string base64url


    【解决方案1】:

    1) 目的不仅是对文本进行二进制编码,而且还对使用超出标准 7 位 ASCII 代码的特定字符集/代码页的文本进行编码。在二进制数据的情况下,您还会遇到某些值会导致问题的问题。当通过电子邮件或 HTTP 请求的一部分传输时,数据中的 0 值可能被解释为文本的结尾。在接收端,第一个 0 之后的所有内容都可能被“遗忘”,并且数据将被破坏。 Base64 编码通过将所有内容编码为 64 个字符的子集来避免所有可能的问题,这些字符独立于实际代码页并且不包含任何控制字符。

    文本不会以二进制形式通过网络发送吗?

    在底层一切都是二进制的,无论是文本、图片、电影,还是执行的代码,都只是内存和处理器寄存器中的一堆零和一。

    2) 见 1)

    3) 3 个字节是 3 * 8 位 = 24 位信息。 A base 64 character just represents 6 bits,因此您需要 4 个 base64 字符 4 * 6 位 = 24 位来编码信息。但是这些base64字符是普通的8位字符,所以实际上这4个base64字符占用了4*8位=32位的空间。增加了 33%。

    【讨论】:

    • 我有点明白了,但是关于第 3 点,你说 ascii 是 8 位的,不是 7 位的,这就是我们使用它的原因
    • @yousefelsayed :好吧,谈论 8 位 ASCII 字符有点草率。原始 ASCII 为 7 位长,大多数现代代码页(例如 ISO-8859-x、Windows-1252 甚至 UTF-8)对前 128 个字符使用原始 ASCII 代码,并且在超出的所有内容中都不同。尽管如此,当我键入“A”时,它通常会占用 8 位内存,并且编码为“01000001”。
    • 哦,我的天哪,我疯了,如果我们要花大约 80 年代或其他通信方式,其中 7 位我将二进制转换为 7 位的 ascii,但它占用 8 位 idon'不明白。请给我解释一下
    • 您可能会阅读有关 ASCII 和历史的信息 here。如今计算机使用字节(8 位)作为最小的可寻址存储单元,因此将一个字符存储在一个存储单元中显然是最有效的,即使一位“浪费”了。但是原来的 7 位代码现在只作为上述代码页和字符集的一个子集存在,所以无论如何 7 位代码已经过时了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-03
    • 1970-01-01
    相关资源
    最近更新 更多