什么是 Base64 编码大小计算器?
Base64 是一种编码方式,使用 64 个可打印的 ASCII 字符来表示二进制数据。它被广泛用于在 HTML/CSS 中内嵌图片(data URI)、在电子邮件中附加文件(MIME),以及在 JSON 或令牌(Token)中传输二进制内容。由于 Base64 会把每 3 个字节的输入转换成 4 个输出字符,编码后的结果始终比原始数据更大——大约会膨胀 33%。这个计算器能精确告诉你数据编码后会变成多大。
如何使用
输入原始文件或数据的大小,选择单位(字节、KB、MB 或 GB),再选择输出是否使用标准填充符(结尾的 = 字符)。计算器会返回编码后的字节数,以及编码所带来的额外开销百分比。
计算公式解析
标准 Base64 以每 3 个字节为一组处理输入。每一组都会变成正好 4 个字符,最后不足 3 字节的那一组会用 = 补齐到 4 个字符。因此含填充时的大小为:
$$\text{Encoded Bytes} = 4 \times \left\lceil \frac{\text{Size} \times \text{Unit}}{3} \right\rceil$$
如果关闭填充,则只生成实际需要的字符:$$\text{Encoded Bytes} = \left\lceil \frac{4 \times \text{Size} \times \text{Unit}}{3} \right\rceil$$,相比之下每次编码可省去 1~2 个填充字符。
实例演示
假设你有一个 1,000 字节的文件。先除以 3 得到 333.33,向上取整(ceil)为 334,再乘以 4:\(334 \times 4 = 1{,}336\) 字节。额外开销为 \((1336 - 1000) / 1000 = 33.6\%\)。如果不使用填充,结果则为 \(\lceil 4000/3 \rceil = \lceil 1333.33 \rceil = 1{,}334\) 字节。
关键术语解释
- Base64
-
一种二进制到文本的编码方案,使用一组64个可打印的ASCII字符(A–Z、a–z、0–9,加上
+和/)来表示任意二进制数据。它允许二进制内容安全地通过仅文本的通道传输,例如电子邮件正文、JSON、XML和URL。 - 3字节组/4字符块
- Base64以固定分组工作。每3个字节(24位)的输入被分成四个6位块,每个块映射到一个Base64字符。因此3个输入字节总是变成4个输出字符——这是编码大小增长的根本原因。
-
填充(
=) -
当输入长度不是3的整数倍时,最后的分组是不完整的。编码器附加一个或两个
=字符,以便输出长度保持为4的倍数。一个剩余字节产生两个=;两个剩余字节产生一个=。 - 开销
- Base64与原始数据相比增加的额外大小。因为3个字节变成4个字符,编码数据大约是\(4/3 \approx 1.333\)倍大,增加了大约33%(一旦计算填充和任何换行符,会略多一些)。
- 数据URI
-
一种URL方案(例如
data:image/png;base64,iVBORw0KGgo…),可以将文件的Base64编码内容直接嵌入到文档中,从而无需为小资源发出单独的网络请求。 - MIME换行
- 在电子邮件(MIME)编码中,Base64输出被分成最多76个字符的行,每行以CRLF结尾。这些换行符在基本33%的扩展之外增加了少量额外的大小。
- ASCII字符
- 来自7位ASCII集合的单个字符,以一个字节编码。Base64输出中的每个字符都是ASCII字符,因此以字符为单位的编码长度等于以字节为单位的长度。
常见问题
为什么 Base64 总是更大? 每 6 比特的数据会被映射成一个 8 比特的 ASCII 字符,因此损失了 25% 的效率,导致字节数大约增加 33%。
计算结果是否包含换行符? 不包含。某些 MIME 编码器会每隔 76 个字符插入一个换行符,这会带来一点点额外体积。本工具只计算原始编码后的大小。
那 data URI 呢? data URI 还会在前面加上类似 data:image/png;base64, 的前缀。把这段字符串的长度加到编码后的大小上,就能得到完整 URI 的长度。