为什么Windows使用CR LF?

我明白两者之间的区别,所以没有必要深入了解,但我只是想知道为什么Windows使用CR和LF来表示换行符的原因。 看起来像Linux方法(只使用LF)使得更有意义,节省空间,并且更容易parsing。

从历史上看,当使用点阵式打印机时,CR将返回到行的第一个位置,而LF将馈送到下一行。 在文件中使用CR + LF可以直接将文件发送到打印机,而不需要任何打印机驱动程序。

它来自于昔日的电传打字机(和打字机)。

过去,当你input一行文字时,你必须把打字机的小车移到行首(CR)上,这个小车把你的纸张放在左边,然后滑动到你键入的位置。 然后,您必须将纸张向下移动一行(LF)才能移动到下一行。

有些情况下,你可能不想在换回马车时换行,比如你要用破折号删掉一个字符(你只是覆盖它)。

但基本上,这归结为惯例。 DOS使用完整的CR / LF约定,而UNIX缩短了一点。 现在我们卡住了!

@sshannin从Raymond Chen的博客发布了一个URL,但是它不再工作。 博客已经改变了它的内部软件,所以url改变了。

浏览新博客中的旧post后,我在这里find了它。

从博客引用:

为什么线路终结器CR + LF?

这个协议可以追溯到电传打字机的日子。 CR代表“回车” – CR控制字符将打印头(“托架”)返回到第0列而不进纸。 LF代表“换行” – LF控制字符将纸张推进一行,而不移动打印头。 因此,如果您想将打印头返回到第零列(准备打印下一行)并将纸张前移(以便在新纸上打印),则需要同时使用CR和LF。

如果您使用RFC 0821(SMTP),RFC 1939(POP),RFC 2060(IMAP)或RFC 2616(HTTP)等各种Internet协议文档,则会看到它们都将CR + LF指定为在线终止序列。 所以真正的问题不是“为什么CP / M,MS-DOS和Win32使用CR + LF作为行结束符?”而是“为什么其他人select与这些标准文档不同并使用其他行结束符?”

Unix采用简单的LF作为行终止序列。 如果您查看stty选项,您会看到onlcr选项指定是否应将LF更改为CR + LF。 如果你把这个设置弄错了,你会得到楼梯文字,在哪里

线

开始

上一行停止的地方。 所以,即使unix,在原始模式下,也需要CR + LF来终止行。 LF之前的隐含CR是一个unix发明,可能是一个经济,因为它每行节省一个字节。

C语言的unix系统将这个约定转化为C语言标准,它只需要“\ n”(编码LF)来终止行,给运行时库带来的负担将原始文件数据转换成逻辑行。

C语言还引入了“换行符”一词来expression“通用行结束符”的概念。 据了解,ASCII委员会在1996年左右将字符0x0A的名称改为“新行”,所以混淆程度更高。

从unix的angular度来看,这是另一个关于这个主题的讨论

我已经将第二个链接更改为Wayback Machine中的快照,因为实际的页面不再可用。

我希望这回答了你的问题。

我看过不止一个帐号,为了更好地将数据传输速率与物理打印速率( 这是很久以前的 )相匹配,发送两个字符(有时更多)而不是一个字符的原因。 移动打印头需要比打印单个字符花费更多的时间,并且发送额外的字符是防止数据传输超越打印设备的一种方式。 所以我们在Windows中有多个字符结尾的原因基本上与我们使用QWERTY键盘的原因相同 – 这是为了减慢速度

很显然,这种做法在Windows中一直延续到今天的原因是基于一些持续向后兼容的概念,最终只是简单的惯性。

值得注意的是, 这个约定在操作系统级别上并不是由Windows严格执行的 。 任何Windows应用程序都可以自由地忽略约定,这取决于它试图兼容的其他应用程序。

有趣的是, 维基百科有关“Newline”的文章声称,Windows 8可能会引入仅使用LF的改变。 文章还指出,Mac OS X引入了从LF + CR到LF的转换。

维基百科 :

在许多采用电传打字机(通常是ASR33)作为控制台设备的早期计算机系统中,通常使用CR + LF序列,因为这些序列是在新行开始时放置这些打印机所必需的。

其他人已经给出了答案,但我想补充…我想你太年轻了,不能用打字机? ;)马车是一个鼓。 将其向右水平移动,将固定式头部返回到页面的左边缘。 用手指和拇指旋转托架前进一行。