"\r"和"\n"有什么区别?

3

可能重复:
\r和\n有什么区别?

我知道它对于每个操作系统都不同,例如,在Windows中可能期望"\r\n",在Unix中可能期望"\n",在Macs中可能期望"\r"。

这两个(或三个,如果你想包括"\r\n")转义序列之间有什么区别?为什么它不能在所有系统中保持一致?

我很好奇这个问题。


您可以在http://www.oualline.com/practical.programmer/eol.html了解更多关于电传打字机如何让我们陷入困境的信息。 - Crashworks
由于它们在底层上是Unix系统,因此运行OS X的Mac也是类Unix系统。如果你遇到了一个运行OS 9或更早版本的系统,我会非常惊讶。 - stonemetal
@stonemetal,我看到了一些OS 9的盒子。通常是那些不愿从Windows 98升级的人群,因为他们珍贵的软件(他们投入了很多钱)无法在更新的系统上运行。 - dreamlax
1
重复的问题:R和N之间有什么区别? - Andrew Grimm
这不是精确的重复。本问题询问不同平台使用不同换行符号语义的原因。而链接的问题是关于\r\n的含义。这是一个显著不同之处(正如两个问题的已接受答案所反映的那样)。 - Adrian McCarthy
6个回答

31

'\r'和'\n'的区别是3。


3
+1 是因为这让我微笑了。 - Daniel Pryden
你是在指ASCII码还是随意开玩笑? :D - Gordon Gustafson
2
必须点赞这个笑话,让你的赞数超过20k。 :) - Mysticial
@Mysticial:太好了!如果我记得没错的话,在你接近30k时,我会回报你的恩情。 - dreamlax
取决于具体实现。 - Adrian McCarthy
1
@AdrianMcCarthy:还取决于你的幽默感。 - dreamlax

16

因为它本来就不是这样。

\r代表"回车"。 \n代表"新行" 换行符。

有些系统足够聪明,只需要 \n 就可以将光标移到新行。而其他一些系统认为使用 \r\n 更合适,因为它们可能会声称需要重置列位置(即 \r)。

在计算机领域中有时候事情“就是这样”。这就是其中之一 :)


2
你永远不会因为“只是因为”而犯错。现在完全有道理了。 - Corey
4
这2个字符出于历史硬件原因而存在...旧打印机需要这2个字符来换行... \r 可以将打印头移回开头,\n 则将纸张向下移动至下一行。 - JoelFan
+1 对于另一个评论 - cletus
1
实际上,\n 确实表示新行。大多数实现使用换行符作为 \n 的方式只是一种实现细节。 - Adrian McCarthy

7
被接受的答案并不完全准确。实际上,\n 表示 'linefeed',而不是 'new line'。这个区别很重要,因为这两个符号都源于电传打字机成为计算机主要输出设备的时代,而不是 CRT 或 LCD。对于电传打字机来说,将打印头移回第一列和将纸张向上移动 1 行是两个不同的操作。至于文件中行末字符的不同约定的起源,其他答案已经正确指出,这只是一个历史上的好奇心。

虽然从技术上讲这是正确的,但操作系统之间不同的序列仅仅是它们创建者的偏好问题(正如评论和答案中所指出的)。感谢您提供了实际的解释,我给你点赞。 - Corey
这不是个人偏好...而是由当时粗糙的硬件(如打印机)所决定的。 - JoelFan
@JoelFan:然而,操作系统之间的差异确实是一种偏好问题。 - Mooing Duck
实际上,\n并不一定意味着换行符。这取决于上下文。在C和C++中,它用于在文本模式下进行I/O时表示新行。大多数实现使用换行符来表示它,但这是一个实现细节。符合规范的实现可以使用类似于U+0085 NEXT LINE的东西。 - Adrian McCarthy
除非有特定的上下文违反,\n 是 U+000A,即换行符。U+0085 没有单字节 UTF-8 表示,因此在源代码中使用它是可疑的。 - Jherico

4
由于每个操作系统制造商都做出了历史性的决定,因此IT技术并不一致。 关于差异,请参见此处的第12和第15个字符:http://www.asciitable.com/

3

1
那它为什么从来不记得我的生日呢? - John Lockwood
3
仅返回翻译的文本:它做...http://en.wikipedia.org/wiki/February_31 :P - Aziz

2

有些系统甚至没有换行符的概念。VAX/VMS和IBM VM操作系统都支持基于记录的文件,不需要使用换行标记。


+1,这是那些我永远无法在谈话中提起但仍然值得知道的有趣事实之一。 - dreamlax
如果有一本名为“尼尔·巴特沃斯事实书”的书,我会认真考虑购买它。 - dreamlax
1
在我曾经的一份工作中,我们发明了“无聊但真实”的概念。这个概念可以有用地应用于任何数量的计算概念和技术。 - anon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接