二进制和字符串(base64)

前言

存储base64时遇到了大小限制,于是我试着优化文本的大小,去寻找方法。
结果也是自做聪明,浪费了时间。

二进制与字符串

众所周知,二进制文件以0101形式存储。
那么假设二进制

0x55

他是16进制的55,按理说应当占8位1字节。

const byte = 0x55;
const char = String.fromCharCode(byte); // 'U'
console.log(char.charCodeAt(0)); // 85(十进制)

我们直接将其转化为字符串,其占一个字节。
然而,在js中,假如字符串中出现非ASCII字符,在传输时就会以UTF-16进行。
也就是说,一个字符会占两个字节。
也就是一个文件会占200%的空间。

而二进制字符串,2位16进制转一个字节。
范围是0-255,超出ASCII码的范围0-127,所以在普遍情况下,都会存在非ASCII字符,导致空间损耗更大。
我试下来,确实比base64更大,但是并没有想象中那么夸张。
image
750KB的图片,转为Base64是1MB。4/3。而二进制字符串是1.1MB,只是大了一些。不过这只是浏览器的显示,我们并不知道传输时的细节。
但是这都不重要,只要知道他比base64更大就足够了。

  1. 更大的空间占用
  2. 更低的可读性

base64

Base64(基准)​​
​​字符集​​:A-Za-z0-9+/=(64 个字符)
​​膨胀率​​:​​~133%​​(3 字节 → 4 字符)
​​优点​​:
标准、广泛支持(浏览器、HTTP、JSON 等)
可打印 ASCII,无特殊字符
​​缺点​​:
仍有 33% 的存储/传输开销

另外还有base85和base91,没有高效到哪里去,所以没流行起来也在情理之中。

结论

假如有将文件以字符串形式传输的需求,那么base64是首选项。

posted @ 2025-07-21 04:18  魂祈梦  阅读(39)  评论(0)    收藏  举报