我想知道CR LF(Windows),LF(Unix)和CR(Macintosh)换行符类型之间的区别(如果可能的话,还有示例)。
答案 0 :(得分:630)
CR和LF是控制字符,分别编码0x0D
(十进制13)和0x0A
(十进制10)。
它们用于标记文本文件中的换行符。正如您所指出的,Windows使用CR LF序列的两个字符; Unix只使用LF而旧的MacOS(OSX前MacIntosh)使用CR。
一个伪造的历史观点:
As indicated by Peter,CR = 回程和LF = 换行,两个表达式的根源在旧的打字机/ TTY中。 LF将纸张向上移动(但保持水平位置相同)并且CR带回“滑架”,以便输入的下一个字符位于纸张的最左侧位置(但在同一条线上)。 CR + LF正在做两件事,即准备打新线。随着时间的推移,代码的物理语义不适用,并且由于内存和软盘空间非常宝贵,一些操作系统设计师决定只使用其中一个字符,他们之间的沟通并不是很好; - )
大多数现代文本编辑器和面向文本的应用程序都提供选项/设置等,允许自动检测文件的行尾约定并相应地显示它。
答案 1 :(得分:405)
这是我发现的一个很好的总结:
回车符(CR)字符(0x0D
,\r
)将光标移动到行的开头而不前进到下一行。此字符在Commodore和早期Macintosh操作系统(OS-9及更早版本)中用作新行字符。
换行符(LF)字符(0x0A
,\n
)将光标向下移动到下一行,而不返回到行的开头。此字符在基于UNIX的系统(Linux,Mac OSX等)中用作新行字符
行尾(EOL)序列(0x0D 0x0A
,\r\n
)实际上是两个ASCII字符,CR和LF字符的组合。它将光标向下移动到下一行和该行的开头。在大多数其他非Unix操作系统(包括Microsoft Windows,Symbian OS等)中,此字符用作新行字符。
答案 2 :(得分:277)
它实际上只是存储在文件中的字节。回车符(从打字机的日子开始)CR
和换行符的LF
类似。它只是指作为行尾标记放置的字节。
一如既往地在wikipedia上提供更多信息。
答案 3 :(得分:141)
由于没有答案说明这一点,简洁地概括为:
回车(MAC pre-OSX)
换行(Linux,MAC OSX)
回车和换行(Windows)
如果您看到奇怪格式的ASCII码,它们只是不同基数/基数的13和10,通常是8(八进制)或16(十六进制)。
答案 4 :(得分:40)
杰夫阿特伍德最近发表了一篇关于此事的博文:The Great Newline Schism
以下是Wikipedia的精髓:
序列CR + LF是常用的 在许多早期的计算机系统上 采用了电传打字机, 通常是ASR33,作为控制台 设备,因为这个序列是 需要将这些打印机定位在 新线的开始。在这些上 系统,文本通常是常规的 组成与这些兼容 打印机,自设备的概念 司机隐藏这些硬件细节 从申请还不是很好 发达;应用程序不得不谈 直接到电传打字机和 遵循其惯例。 分离 这两个功能隐藏了 事实上,打印头不能 从最右边回到 下一行的开头 一个字符的时间。这就是为什么 序列始终与CR一起发送 第一。事实上,这往往是必要的 发送额外的字符(外来的 CRs或NULs,被忽略) 给打印头时间移动 左边距。即使是电传手机 被计算机终端取代 具有更高的波特率,许多操作 系统仍然支持自动 发送这些填充字符,用于 兼容更便宜的终端 这需要多个字符时间 滚动显示。
答案 5 :(得分:16)
CR - ASCII代码13
LF - ASCII码10。
理论上CR将光标返回到第一个位置(左侧)。 LF将一行移动光标向下移动一行。这就是过去你如何控制打印机和文本模式监视器。 这些字符通常用于标记文本文件中的行尾。 不同的操作系统使用不同的约定正如您所指出的,Windows使用CR / LF组合而前OSX Mac仅使用CR等等。
答案 6 :(得分:7)
基于ASCII或a的系统 兼容字符集使用LF (换行,0x0A,10 十进制)或CR(回车,0x0D,十进制13) 单独或CR后跟 LF(CR + LF,0x0D 0x0A); 这些字符基于打印机命令:换行符 表示一行 纸张应从打印机送出,并回车 表示打印机 运输应该返回到当前行的开头。
这是details。
答案 7 :(得分:5)
“记录分隔符”或“行终结者”的悲惨状态是计算黑暗时代的遗产。
现在,我们理所当然地认为,我们想要表示的任何东西都是某种结构化数据,并且符合定义行,文件,协议,消息,标记等的各种抽象。
但从前这不完全正确。应用程序内置控制字符和特定于设备的处理。需要CR和LF的脑死系统根本没有记录分隔符或行终止符的抽象。为了使电传或视频显示返回第一列,CR是必要的,并且LF(今天,NL,相同的代码)是必要的,以使其前进到下一行。我想除了将原始数据转储到设备之外做一些其他事情的想法太复杂了。
Unix和Mac实际上为行结束指定了一个抽象,想象一下。可悲的是,他们指定了不同的。 (Unix,ahem,排在第一位。)当然,他们使用的控制代码已经与S.O.P“接近”了。
由于我们今天几乎所有的操作软件都是Unix,Mac或MS操作软件的后代,我们仍然坚持线条结束的混乱。
答案 8 :(得分:1)
NL源自EBCDIC NL = x' 15'这与CRLF x' odoa ascii在逻辑上相比......当物理地将数据从大型机移动到中型时,这变得很明显。 Coloquially(因为只有奥术家使用ebcdic)NL已被等同于CR或LF或CRLF