3zz*_*zzy 679 line-breaks
我想知道CR LF(Windows),LF(Unix)和CR(Macintosh)换行符类型之间的差异(如果可能的话,有示例).
mjv*_*mjv 694
CR和LF是控制字符,分别编码0x0D(十进制13)和0x0A(十进制10).
它们用于标记文本文件中的换行符.正如您所指出的,Windows使用CR LF序列的两个字符; Unix只使用LF而旧的MacOS(OSX前MacIntosh)使用CR.
一个伪造的历史观点:
正如彼得指出,CR = 回车和LF = 换行,两个表达式有他们的老打字机/ TTY根.LF将纸张向上移动(但保持水平位置相同)并且CR带回"滑架",以便输入的下一个字符位于纸张的最左侧位置(但在同一条线上).CR + LF正在做两件事,即准备打新线.随着时间的推移,代码的物理语义不适用,并且由于内存和软盘空间非常宝贵,一些操作系统设计人员决定只使用其中一个字符,他们之间的沟通并不是很好; - )
大多数现代文本编辑器和面向文本的应用程序提供选项/设置等,允许自动检测文件的行尾约定并相应地显示它.
Tay*_*ese 434
这是我发现的一个很好的总结:
回车符(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等)中,此字符用作新行字符.
Pet*_*ter 312
它实际上只是存储在文件中的字节.CR回车的字节码(从打字机的日子开始),LF同样地,用于换行.它只是指作为行尾标记放置的字节.
在维基百科上,一如既往地提供更多信息.
ahn*_*cad 158
由于没有答案说明这一点,简洁总结:
回车(MAC pre-OSX)
换行(Linux,MAC OSX)
回车和换行(Windows)
如果您看到奇怪格式的ASCII代码,它们只是不同基数/基数中的数字13和10,通常是基数8(八进制)或基数16(十六进制).
http://www.bluesock.org/~willg/dev/ascii.html
Man*_*anu 45
杰夫阿特伍德最近发表了一篇关于此事的博客文章:Great Newline Schism
这是维基百科的精髓:
序列CR + LF在许多采用电传打字机(通常是ASR33)作为控制台设备的早期计算机系统中普遍使用,因为需要这一序列来将这些打印机定位在新线的开始处.在这些系统上,文本通常经常被组合以与这些打印机兼容,因为从应用程序中隐藏这些硬件细节的设备驱动程序的概念尚未得到很好的发展.应用程序必须直接与电传打字机对话并遵循其惯例.两个功能的分离隐藏了这样一个事实,即打印头在一个字符时间内不能从最右边返回到下一行的开头.这就是为什么序列始终首先与CR一起发送的原因.实际上,通常需要发送额外的字符(无关的CR或NUL,这些字符被忽略)以使打印头时间移动到左边距.即使在具有较高波特率的计算机终端取代了远程类型之后,许多操作系统仍然支持自动发送这些填充字符,以便与需要多个字符时间来滚动显示的更便宜的终端兼容.
Dmi*_*ryK 16
CR - ASCII代码13
LF - ASCII码10.
理论上CR将光标返回到第一个位置(左侧).LF将一行移动光标向下移动一行.这就是过去你如何控制打印机和文本模式监视器.这些字符通常用于标记文本文件中的行尾.不同的操作系统使用不同的约定 正如您所指出的,Windows使用CR/LF组合而前OSX Mac仅使用CR等.
nav*_*gar 11
CR 和 LF 是一组特殊的字符,可以帮助我们格式化代码。
CR (\r) 代表回车。它将光标放在行的开头,但不会创建新行。这就是经典 Mac 操作系统的工作原理(目前不适用,除非您正在处理旧文件)。
LF (\n) 代表换行。它创建一个新行,但不会将光标放在该行的开头。光标停留在最后一行的末尾。这就是 Unix(包括 macOS)和 Linux 的工作原理。
CRLF (\r\n) 创建一个新行并将光标置于新行的开头。这就是我们在 Windows 操作系统中看到的方式。
Git默认使用 LF。因此,当我们在 Windows 上使用 Git 时,它会抛出“CRLF 将被 LF 替换”之类的警告,并自动将所有 CRLF 转换为 LF,以便代码变得兼容。
注意:别担心……不要将其视为警告,而应将其视为通知。
"记录分隔符"或"行终结符"的悲惨状态是计算黑暗时代的遗产.
现在,我们理所当然地认为,我们想要表示的任何东西在某种程度上都是结构化数据,并且符合定义行,文件,协议,消息,标记等的各种抽象.
但曾几何时,这并不完全正确.应用程序内置控制字符和特定于设备的处理.需要CR和LF的脑死系统根本没有记录分隔符或行终止符的抽象.为了使电传或视频显示返回第一列,CR是必要的,并且LF(今天,NL,相同的代码)是必要的,以使其前进到下一行.我想除了将原始数据转储到设备之外做一些其他事情的想法太复杂了.
Unix和Mac实际上为行尾指定了一个抽象,想象一下.可悲的是,他们指定了不同的.(Unix,ahem,排在第一位.)当然,他们使用的控制代码已经与SOP"接近"了
由于我们今天几乎所有的操作软件都是Unix,Mac或MS操作软件的后代,因此我们不得不忍受线路结束的混乱.
| 归档时间: |
|
| 查看次数: |
1010846 次 |
| 最近记录: |