替换Base64 - Unicode的可能性?

时间:2013-09-19 12:37:33

标签: javascript unicode base64

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

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

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

但是,每个角色占用2 ^ 8个空间。

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

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

这样就不会有损失。

3 个答案:

答案 0 :(得分:3)

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

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

选择适合数据和用法的编码。不要只是尝试编写一个编码来做一些不应该做的事情。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

  

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

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