提醒-\ r \ n或\ n \ r?


390

我只是不记得那些。那么,正确终止老式ASCII行的正确方法是什么?


11
如果这样做,请确保以二进制模式打开文件。否则,标准C / C ++文件流会将“ \ n”(对于文本文件(默认))转换为特定于平台的行序结束(ELS)。因此,Windows上的“ \ r \ n”将转换为物理磁盘上的“ \ r \ r \ n”。注意:如果仅使用C / C ++读回文件,您将不会注意到,因为从文件读取时ELS会转换回“ \ n”。
马丁·约克

@Martin-我在.net中,并且在此示例中使用File.AppendAllText,带有“ \ r \ n”,而我只是查看了一个文件,并且在末尾没有\ r重复项线。魔法?
DanielMošmondor2011年

@Daniel:我应该更具体一些。的C / C ++流。当与文件相关联,并在打开的文本模式。它还取决于您如何查看文件(使用十六进制编辑器)。
马丁·约克

@Martin-使用十六进制模式的PSPad ...
DanielMošmondor2011年

1
在古代键盘上,Enter键称为Return键。因此,先返回Return,然后生成Linefeed作为响应。当您拥有太多历史记录时,这一切都是显而易见的。
Mark Ransom

Answers:


1084

我会用单词“ r etur n ”来记住,r在n之前。


116
要记住要使用的单词是return,请记住\ r是回车。切记“ Return”是Mac键盘上按键的名称,否则您以后可能会看一下PC键盘,看到名为“ Enter”的按键,并弄错了字母顺序!
罗伯·肯尼迪

3
@大卫,但我想知道的是效果\n\r\r\n是一样的,是不是他们不一样的效果?你能分辨出区别吗?
阿努比斯先生2012年

7
@ Mr.Anubis,如果您有特定的点阵打印机,则应该没有区别,因为命令的顺序并不重要。但是,在某些打印机上,您会得到多余的空行,或者根本没有行进。上面所说的一切都适用于文本编辑器-他们会感到困惑,TextStream类会生病,等等。为了IS重要。:)
丹尼尔·莫斯蒙多(DanielMošmondor)2012年

12
@DanielMošmondor或者,您可能只记得订单是impoRtaNt。或者,当您在SO处询问时,有人给您RemiNder,后来您忘记了。否则您不能使用姓氏作为提示,因为r和n的顺序颠倒了:)
Daniel Daranas 2013年

5
@RobKennedy哈哈,你知道我来这里读有关回报的事情,并以为“太好了!”。然后,我阅读了您的评论。现在,每次我都不记得应该不应该查看的键-我看着我的“ Enter”键,并且我认为“这里有些错误” ...哈哈,想起来了!
韦恩·浦田

53

如果使用的是C#,则应使用Environment.NewLine,对于MSDN,它是:

对于非Unix平台,包含“ \ r \ n”的字符串,对于Unix平台,包含“ \ n”的字符串。


46
实际上,这取决于您在做什么。如果您只是将纯文本输出到控制台或本地文件中,Environment.NewLine则可以。但是,如果您以定义良好的格式编写内容,则该格式也可以定义换行符。例如,HTTP协议规定,你必须使用\r\n的行终止页眉等,与平台无关。
Matti Virkkunen 2011年

3
是的,这确实是个坏建议。
IvanP 2015年

这就是为什么您需要转义Web消息并构建单元测试以验证将\ r \ n(windows),\ r(mac),\ n(linux)发送为\ r \ n正确发送到Web服务器的原因。
TamusJRoyce '17

37

新行取决于您的操作系统:

DOS & Windows: \r\n 0D0A (hex), 13,10 (decimal)
Unix & Mac OS X: \n, 0A, 10
Macintosh (OS 9): \r, 0D, 13

此处有更多详细信息:https : //ccrma.stanford.edu/~craig/utility/flip/

如有疑问,请使用任何免费的十六进制查看器/编辑器来查看文件如何编码其新行。

对于我来说,我使用下面的指南以帮助自己记住:0D0A = \ r \ n = CR,LF = CA 让rr iage [R E打开,李ñ Ë饲料


7
奇怪的是,我是那些0D0A心知肚明但仍然对\rand 感到困惑的人之一\n
Nyerguds

1
或者,我记得\ r是回车符,\ n是换行符...只是我不记得他们的顺序,所以这对记住哪个是0D和哪个是0A
无济于事

20

顺序为CR(回车)-LF(换行)。还记得点阵打印机吗?究竟。所以-正确的顺序是\ r \ n


我认为这是最符合逻辑的答案
大卫Snabel-Caunt

12
LF + CR将在打印机上执行相同的CR + LF。
ikegami

10
我不同意@David。仅仅考虑点矩阵打印机(或打字机,因为它们是需要回车的打印机)是不够的。仅提供有关它们如何工作的基本信息,没有理由认为我们在返回到行的开始之前还是之后都推进论文很重要。\ r \ n和\ n \ r都将纸张放在同一位置。
罗伯·肯尼迪

@ikegami在大多数打印机上使用,而不是在所有打印机上使用。他们还具有DIP开关来配置该行为。:)
丹尼尔·莫斯蒙多(DanielMošmondor)2012年

5
在回车后放置换行的原因之一是减少了所需的总时间-当打印头返回纸张的左边缘时,压纸卷轴可以索引一行。较长的操作首先开始,因此整个操作在花费较长的操作才能完成的时间内完成。当时,由于这种原因,我们做了很多事情。想象在110波特处等待几百行...
杰里·安德鲁斯

8

在任何.NET语言中,Environment.NewLine都是可取的。


对于常量字符串不起作用。必要时最好不要使用常量,而应使用静态字符串;)
TamusJRoyce

5

手动执行此操作时要小心。
实际上,我建议完全不要这样做。

实际上,我们在谈论的是特定于平台的线路终止序列LTS。

如果您以文本模式(即非二进制)打开文件,则流会将“ \ n”转换为适合您平台的LTS。然后,在读取文件时将LTS转换回“ \ n”。

结果,如果在Windows文件中打印“ \ r \ n”,则将在物理文件中获得序列“ \ r \ r \ n”(使用十六进制编辑器查看)。

当然,在平台之间传输文件时,这是真正的痛苦。

现在,如果您要写入网络流,那么我将手动执行此操作(因为大多数网络协议都专门对此进行了说明)。但是我将确保流没有做任何解释(因此二进制模式是适当的)。


4

\r\n 对于Windows来说就可以了。


单个\n窗口也可以在Windows上正常运行,包括最新版本的记事本。
安德烈·卡隆

我认为现代编辑器会检测行结尾,因为不同的操作系统使用不同的结尾。
David Snabel-Caunt 2011年

1
实际上不是:如果将其打印到Windows上的文件(以文本模式打开的std C / C ++文件)中,则物理文件将包含“ \ r \ r \ n”(使用十六进制编辑器进行检查)。当您读回它时,“ \ r \ n”将转换回单个“ \ n”。
马丁·约克

2
实际上,@ DavidCaunt我只是尝试了\ n,它不适用于Win8上的记事本。
2014年

4

Wikipedia (您可以在该文章中阅读适合您的操作系统的内容):

基于ASCII或兼容字符集的系统分别使用LF(换行,'\ n',0x0A,十进制10)或CR(回车,'\ r',0x0D,十进制13)或CR后跟LF(CR + LF,'\ r \ n',0x0D0A)。


3

\r\n

奇怪的是,我记得它是因为它与我使用的打字机相反
好吧,如果这是正常的话,我就不需要记住它了。:-)

维基百科的打字机 *图片来自维基百科

在打字机中,当您完成对数字的数字输入时,请使用回车操纵杆,该操纵杆是在使滚筒滚动之前,换行符之后以及在您手动操作回车之后

您可以从freesound.org此记录中聆听开始时,在结束时大约-1:03秒,在钟声警告结束后(滚动鼓的线声响起)和之后回车之一。


2

如果您使用的是C#,为什么不使用Environment.NewLine?(我假设您使用了一些文件编写器对象...只需将其传递给它Environment.NewLine,它将处理正确的终止符。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.