RFC 2045 将编码数据的最大行长度定义为 76。但是,我找不到任何解释为什么它是 76。这个数字完全是任意的,还是背后有一些原因?
4 回答
RFC2822 是电子邮件的遗留标准。在 RFC2822 的 2.1.1 部分,您可以找到原因如下: 它也影响 MIME。
该标准对一行中的字符数有两个限制。每行字符必须不超过 998 个字符,并且应该不超过 78 个字符,不包括 CRLF。
998 个字符的限制是由于在发送、接收或存储 Internet 消息格式消息的许多实现中的限制,这些消息根本无法在一行中处理超过 998 个字符。为了健壮性,接收实现可以很好地处理一行中任意大量的字符。但是,有很多实现(符合 [RFC2821] 的传输要求)不接受包含超过 1000 个字符的消息,包括每行的 CR 和 LF,因此不创建此类消息对实现很重要。
更保守的 78 个字符推荐是为了适应显示这些消息的用户界面的许多实现,这些消息可能会截断或灾难性地换行,每行超过 78 个字符的显示,尽管这样的实现不符合本规范的意图(以及 [RFC2821] 的意图,如果它们实际上导致信息丢失)。同样,即使对消息施加了这种限制,但为了健壮性,显示消息以处理一行中任意数量的字符(当然至少达到 998 个字符的限制)的实现也很重要。
实际上,最初的 RFC 822 定义了 72 个字符的限制,罪魁祸首是电传打字机,它是早期计算机的标准输出设备。
您还可以“感谢”电传设备,因为电子邮件(和 Windows)中的行终止符是 2 个字符,即 CR(回车)和 LF(换行)。
为了使电传打字机将插入符号移动到位置 0 并将纸张向前推进一个刻度,必须在每一行的末尾传输此序列。
到 RFC 2822 淘汰原始版本时,没有人使用电传打字机来呈现电子邮件,所以为了适应默认的 TTY 监视器设备,它被放宽了一点。
包括终止回车和换行在内的最大行长度为 80,源自包含多达 80 列孔的老式穿孔卡片。
为什么是80?因为在任何一本书中,一行很少超过 80 个字符,包括空格。
它意味着最大行长度为 80,包括终止的回车(将电传打字机或打字机的托架移动到最左边的位置)和换行(将纸张前进一行)。
由于 Base64 是 4 个字符的倍数,因此我们最终得到最多 76 个字符,不包括 CR+LF。
另一个例子是描述卫星轨道的 TLE(双线元素集)。它只适合两张打孔卡。
由于 CR(水平移动到最左边,保持垂直位置)和 LF(垂直移动到下一行,保持水平位置不变)是两个完全独立的东西,我们仍然拥有它们。下一行应该从最左边的位置开始,不是吗?
对于粗体打印,一行打印两次,它们之间只有一个 CR,即不推进纸张。因此,标准序列是先 CR,然后是 LF。
但是,好的老式机械打字机通常先做LF,然后再做CR。
The bit to do with user interfaces
http://en.wikipedia.org/wiki/Text_mode#PC_common_text_modes
Basically, 80 characters across (and usually 25 or 30 lines) was the most common standard for displays. 78 provides a sane standard as this allows for some small decorations to be used (borders).