-1

Base64 ( 2^6 ) 使用字符子集,通常

a-z, A-Z, 0-9, / , +

它不使用 ASCII 中定义的所有 128,因为不能使用不可打印的字符。

但是,每个字符占用 2^8 空间。

这导致 33% (4/3) 的空间浪费。

为什么不能使用具有 256 个可打印字符的 UTF-8 子集。因此,代替上面列出的有限子集,UTF 的丰富性可用于填充所有 8 位。

这样就没有损失了。

4

3 回答 3

3

Base64 用于在不支持 8 位数据的系统(如电子邮件和 XML)中对任意 8 位数据进行编码。它使用 7 位 ASCII 字符是故意的,因此它可以通过 7 位系统,如电子邮件。但它并不是世界上唯一的数据编码格式。例如,yEnc 的压缩率往往比 base64 略好。如果您的数据大多与 ASCII 兼容,那么 Quoted-Printable 几乎是一对一的。

UTF 用于编码 Unicode 文本,而不是任意二进制数据。时期。

选择适合数据和使用的编码。不要只是尝试将编码凝聚成做一些它不应该做的事情。

于 2013-09-20T23:31:09.020 回答
1

UTF-8 对字符 128-255 使用 2 个字节,因此将使用 16 位来存储 8 位(效率为 50%)而不是使用 8 位来存储 6 位(效率为 75%)

于 2013-09-19T12:50:26.800 回答
1

为什么不能使用具有 256 个可打印字符的 UTF-8 子集。因此,代替上面列出的有限子集,UTF 的丰富性可用于填充所有 8 位。

假设您使用的子集包含 ASCII 范围内的 94 个非空格可打印字符(以 UTF-8 编码为每个 1 个字节)和 U+0080 到 U+07FF 范围内的某个位置的 162 个字符(以 UTF-8 编码每个 2 个字节)。假设值的均匀分布,您需要平均每字节数据 1.6328125 字节的文本,这比 Base64 的 1.3333333 效率低。

于 2013-09-19T22:53:08.343 回答