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

67

这两个都表示"新行",但是什么情况下会使用其中一个而不是另一个呢?


1
https://dev59.com/X3M_5IYBdhLWcg3wq1GF - Josh Lee
1
可能是 CR LF,LF 和 CR 行分隔符的区别? 的重复问题。 - Josh Lee
8个回答

93

\r\nWindows风格。

\nPOSIX风格。

\r 是旧版OS X Macs的风格,现代 Mac使用POSIX风格。


\r 是回车符,\n 是换行符,在早期计算机中只有打印机可以输出程序结果给用户,如果要从新的一行左侧开始打印,必须使用\n作为换行符,使用\r将光标移动到最左侧位置以获取回车符。这种语法源自早期计算机,并在Windows平台上保留至今。


9
CR+LF在许多网络协议(例如HTTP)中常被使用,不管传输数据所使用的操作系统是什么。当目标系统使用ASCII或Unicode字符系统时,\r通常会映射到CR。 (如果目标系统使用EBCDIC,则\r可能没有映射)。\n比较棘手,因为它取决于上下文。它通常被映射到ASCII / Unicode行进制符,但情况并非总是如此简单。关于此问题的“可能重复”的回答中有详细信息。 - Adrian McCarthy
你可以从这里查看HTTP规范:https://www.w3.org/Protocols/rfc2616/rfc2616-sec5.html CRLF(回车换行) - mfaani

15

\n代表换行。它意味着光标必须移到下一行。

\r代表回车符。它意味着光标应该回到行首。

Unix程序通常只需要一个换行符 (\n)。

而Windows程序通常需要两个(\r\n)。


2
9年后,你写的是Windows和Windows程序,而不是MacOS和Windows。 - martinomburajr
1
我非常确定你是错的,Windows和Mac的行为是不同的。但由于我不是Mac专家,我将完全删除关于Mac的那一行,并留给更有经验的人来处理。 - Philippe Carriere
在 Mac OS X 之前,Mac 使用 \r 作为行终止符。由于 Mac OS X / OS X / macOS 是 Unix 系统,因此旧的约定被放弃,改用标准 Unix 约定的单个换行符。 - chepner

8

\n代表换行,\r\n代表换行并回车(即将光标移到左侧)。


4
不同操作系统处理换行符的方式不同。以下是最常见的几种:
DOS和Windows
它们希望换行符是两个字符的组合,即'\r\n'(或13后跟10)。
Unix(因此Linux也是如此)
Unix使用单个'\n'表示新行。
Mac
Mac使用单个'\r'。
因此,在将应用程序从Windows移植到Mac时,如果使用文件夹路径等内容,则会出现问题。

Mac自从Mac OS X开始使用\n - dcolazin

3

'\n' 是 Unix 中的默认换行符,'\r\n' 是 Windows 中的默认换行符。


2
这是操作系统Windows(\r\n)和Linux(\n)中表示换行的方式。
在Unix中,\r是回车符(CR),\n是换行符(LF),它们一起恰好是Windows换行符标识符,并将其替换为Unix换行符标识符。
在Windows中,\r也是CR,但\n是CR和LF的组合。因此,您实际上正在尝试用CR+LF替换CR+CR+LF。这没有多少意义,对吧。
来自“perldoc perlop”:
所有系统都使用虚拟的“\n”表示行终止符,称为“换行符”。并不存在一个不变的物理换行符字符。操作系统、设备驱动程序、C库和Perl共同维护这个幻觉。并非所有系统都将“\r”读作ASCII CR,“\n”读作ASCII LF。例如,在Mac上,它们被颠倒了,在没有行终止符的系统上,打印“\n”可能不会产生任何实际数据。通常情况下,当您需要确切的字符时,请使用字面ASCII,而当您需要适用于您的系统的“换行符”时,请使用“\n”。例如,大多数网络协议期望并偏爱CR+LF(“\015\012”或“\cM\cJ”)作为行终止符,尽管它们经常接受仅“\012”,但它们很少容忍仅“\015”。如果您养成了在网络中使用“\n”的习惯,有一天您可能会受到伤害。

1

不同操作系统之间的区别在于,在Windows中,换行符是\r\n,而在Linux中只是\n。Mac OSX仅使用\r作为换行符。这实际上只是取决于操作系统的设计者们所做的选择。


Mac自从Mac OS X开始使用\n - dcolazin

-1
在C#中,你可以使用Environment.NewLine。

具有讽刺意味的是,尽管这种用法比“\n”或“\r\n”更受欢迎(至少在DOT NET中),但它实际上并没有回答原始问题。 - MickeyfAgain_BeforeExitOfSO
由于没有回答问题,所以被投下反对票。 - TNguyen
我明白了,这个答案确实回答了问题。 - FaranAiki
请问,C# 标签确切地在哪里使用了? - HackerDaGreat57

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