我记得在某处读到过,任何附加到电子邮件的二进制文件都必须先进行 UUENCODEd,这会使文件大小变得相当大,因此最好通过其他直接传输方式(如 FTP、Skype 等)发送文件。
UUENCODE 会使我的二进制文件变大多少?
答案1
简短回答:
uuencoded 文件的大小会比原始文件大约大 35%。
长答案:
Uuencode 文件如下所示:
开始 600 文件名 *“F9O;R!B87(*”@`` ` 结尾
- 其中 7 个字节用于
begin
表示权限,2 个字节用于表示分隔空格。 - X 字节为文件名(取决于名称)
- 然后是实际的编码数据。每 6 位映射到 8 位(结果都是可打印的 ASCII 字符)。这会使大小增加到8 / 6,即原始大小的 1⅓ 倍。
- 然后,结果被分成 65 个字符的行,因此结果将显示在 80 个字符宽的屏幕上。这样每 65 个字符就会增加一个换行符。因此文件大小增加了1/65
- 最后 3 个字节
end
因此我们得到:13 个字节,加上文件名长度,加上原始文件大小的1 68 / 195 。
(68 / 195是1⅓ 加1 / 65,或 1 65 / 195加3 / 195。这非常接近 35%,这就是为什么经验法则是“尺寸增加了三分之一”)。
答案2
常见的现代电子邮件客户端都会使用 base64,这会使文件体积增大约 35%,但仅限于电子邮件内部。
如今,通常使用 base64 来代替。原始二进制文件的每个字节包含 8 位。Base64 可以在每个编码字节中存储相当于 6 位原始数据的内容。因此编码大小是原始大小的 8/6:
8 / 6 = 1.33... = 133% = 33% more
然后添加换行符,这又增加了百分之几。
当然,一旦文件被解码并保存到接收者的文件系统,解码后的文件将与原始文件完全相同。
答案3
虽然实际答案(由@Per Salmi 和@depquid 给出)只比 33% 多一点(3 个字节变成 4 个,加上行尾,再加上一些内务处理)但您不必担心uuencode
。
uuencode
可以追溯到 UNIX 的古老时代,那时还没有 MIME 邮件程序。在那个年代,要在纯文本环境中(例如 Mail、netnews/usenet)拖拽字节,您必须手动将文件编码为 7 位字符安全。然后,接收者必须手动将文件保存在某个地方,可能要连接并排序多封邮件/帖子,然后运行uudecode
(它足够智能,可以忽略 BEGIN/END 块之外的任何内容)并获取二进制文件。但我们不再需要这样做了,至少对于邮件来说不需要。
如果你使用任何现代邮件程序,这种交叉编码已经自动发生。二进制 MIME 元素通常采用 base64 编码(如@depquid 所述)。
因此,您已经进行了 MIME Base64 编码,如果您对带宽分配的影响感到好奇,这会使文件体积增大 33% 以上。执行 uuencode/uudecode 只会给您和接收方增加更多工作量。
答案4
我认为你不能确切地说出 uuencoded 的内容到底有多大,因为这取决于实际内容,但它至少比原始内容大 40%。维基百科上的缺点部分。