CR LF,LF和CR换行符types之间的区别?
我想知道CR LF(Windows),LF(Unix)和CR(Macintosh)换行符types之间的区别(如果可能的话)。
这实际上只是将哪些字节存储在文件中。 CR
是一个字节码,用于回车(从打字机的日子)和LF
类似的换行。 它只是指放置在行尾标记的字节。
与往常一样,在维基百科上提供更多的信息。
CR和LF是控制字符,分别编码为0x0D(13位十进制)和0x0A(10位十进制)。
它们用于在文本文件中标记换行符。 如您所示,Windows使用两个字符CR LF序列; Unix只使用LF和旧的MacOS(pre-OSX MacIntosh)使用CR。
一个杜撰的历史视angular:
如Peter所示,CR = 回车符和LF =换行符,两个expression式根源于旧的打字机/ TTY。 LF将纸张向上移动(但保持水平位置相同),并将CR带回“托架”,以便下一个input的字符位于纸张的最左侧位置(但在同一行上)。 CR + LF正在做这两件事,即准备打出新的一行。 随着时间的推移,代码的物理语义不再适用,并且由于内存和软盘空间非常重要,一些操作系统devise人员决定只使用其中一个angular色,而他们之间的通信并不是很好。 – )
大多数现代文本编辑器和面向文本的应用程序提供选项/设置等,允许自动检测文件的行尾约定并相应地显示它。
这是一个很好的总结,我发现:
回车(CR)字符(0x0D,\ r)将光标移动到行的开头,而不前进到下一行。 此字符在Commodore和Early Macintosh操作系统(OS-9及更早版本)中用作新行字符。
换行(LF)字符(0x0A,\ n)将光标向下移动到下一行,而不返回到行首。 此字符在基于UNIX的系统(Linux,Mac OSX等)中用作新行字符
行尾(EOL)序列(0x0D 0x0A,\ r \ n)实际上是两个ASCII字符,即CR和LF字符的组合。 它将光标向下移动到下一行和该行的开始处。 该字符在大多数其他非Unix操作系统(包括Microsoft Windows,Symbian OS等)中用作新行字符。
资源
既然没有答案说明这一点,简单地总结一下:
回车 (MAC pre-OSX)
CR = \r = ASCII code 13
换行 (Linux,MAC OSX)
LF = \n = ASCII code 10
回车和换行 (Windows)
CRLF = \r\n = ASCII code 13 and then ASCII code 10
如果你看到奇怪的格式的ASCII代码,他们只是在不同的基数/基数13和10,通常是8(八进制)或16(hex)。
杰夫·阿特伍德(Jeff Atwood)最近发表了一篇关于此的博客文章: 伟大的新线分裂论
这里是维基百科的精髓:
在许多采用电传打字机(通常是ASR33)作为控制台设备的早期计算机系统中,通常使用CR + LF序列,因为在新行开始时需要将这些打印机定位。 在这些系统上,由于设备驱动程序从应用程序中隐藏硬件细节的概念还没有很好地发展,所以文本经常被组织成与这些打印机兼容。 应用程序必须直接与电传打字机谈话,并遵循其惯例。 这两个function的分离隐藏了打印头在一个字符时间内不能从最右边返回到下一行的开始的事实。 这就是为什么序列总是先与CR一起发送的原因。 事实上,通常需要发送额外的字符(无关CR或NUL,这些字符被忽略),以使打印头时间移动到左边距。 即使在传真机被更高波特率的计算机terminal代替之后,许多操作系统仍然支持自动发送这些填充字符,以便与需要多个字符时间来滚动显示器的更便宜的terminal兼容。
CR – ASCII码13
LF – ASCII码10。
理论上,CR将光标返回到第一个位置(在左边)。 LF将一行移动光标向下移动一行。 这是你以前如何控制打印机和文本模式的显示器。 这些字符通常用于标记文本文件中的行尾。 不同的操作系统使用不同的约定。 正如你所指出的,Windows使用CR / LF组合,而预OSX Mac只使用CR等等。
基于ASCII或兼容字符集的系统分别使用LF(换行,0x0A,十进制10)或CR(回车,0x0D,十进制13),或CR后跟LF(CR + LF,0x0D 0x0A); 这些字符基于打印机命令:换行表示应从打印机送出一行纸,并且回车指示打印机托架应该返回到当前行的开头。
这是细节 。
“logging分隔符”或“行结束符”的悲哀状态是计算黑暗时代的遗产。
现在,我们理所当然地认为,任何我们想要expression的东西都是某种结构化的数据,并且符合定义行,文件,协议,消息,标记等等的各种抽象。
但曾几何时,这不完全正确。 应用程序内置控制字符和设备特定的处理。 需要CR和LF的大脑死亡系统对logging分隔符或行结束符都没有抽象。 为了使电传或电视显示返回到第一列,必须使用CR,并且需要LF(今天,NL,相同的代码)才能使其进入下一行。 我猜想,除了将原始数据转储到设备之外,其他的做法太复杂了。
Unix和Mac实际上为行结束指定了一个抽象 ,想象一下。 可悲的是,他们指定了不同的。 (Unix,ahem,先来了。)当然,他们使用了一个已经“接近”SOP的控制代码
由于我们现在几乎所有的操作软件都是Unix,Mac或MS操作软件的后代,所以我们一直困惑于结束混淆的行列。
从EBCDIC NL = x'15'得到的NL在逻辑上与CRLF x'odoa ascii进行比较…当从大型机向中等范围物理移动数据时,这变得明显。 通俗地说(因为只有神秘的人使用ebcdic)NL等于CR或LF或CRLF