二进制和字符串(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更大,但是并没有想象中那么夸张。

750KB的图片,转为Base64是1MB。4/3。而二进制字符串是1.1MB,只是大了一些。不过这只是浏览器的显示,我们并不知道传输时的细节。
但是这都不重要,只要知道他比base64更大就足够了。
- 更大的空间占用
- 更低的可读性
base64
Base64(基准)
字符集:A-Za-z0-9+/=(64 个字符)
膨胀率:~133%(3 字节 → 4 字符)
优点:
标准、广泛支持(浏览器、HTTP、JSON 等)
可打印 ASCII,无特殊字符
缺点:
仍有 33% 的存储/传输开销
另外还有base85和base91,没有高效到哪里去,所以没流行起来也在情理之中。
结论
假如有将文件以字符串形式传输的需求,那么base64是首选项。

浙公网安备 33010602011771号