\n(换行符)和\r(回车符)有什么区别?

特别地,\n和\r之间有什么实际的区别吗?是否有应该使用其中一种而不是另一种的地方?


当前回答

In windows, the \n moves to the beginning of the next line. The \r moves to the beginning of the current line, without moving to the next line. I have used \r in my own console apps where I am testing out some code and I don't want to see text scrolling up my screen, so rather than use \n after printing out some text, of say, a frame rate (FPS), I will printf("%-10d\r", fps); This will return the cursor to the beginning of the line without moving down to the next line and allow me to have other information on the screen that doesn't get scrolled off while the framerate constantly updates on the same line (the %-10 makes certain the output is at least 10 characters, left justified so it ends up padded by spaces, overwriting any old values for that line). It's quite handy for stuff like this, usually when I have debugging stuff output to my console screen.

一点历史

/r代表返回或回车,它的历史归功于打字机。一个回车符将你的回车符一直向右移动,这样你就在行首输入了。

/n代表新行,同样,从打字的日子开始,你移动到新的行。但不一定要在开头,这就是为什么一些操作系统同时需要/r返回和/n换行符,因为打字机的换行顺序是这样的。这也解释了旧的8位计算机使用Return而不是Enter,从回车中返回,这是很熟悉的。

其他回答

两个不同的角色。

\n在Unix文本文件中用作行结束符

\r历史上(在os X之前)在Mac文本文件中用作行结束符

\r\n(即同时使用)用于终止Windows和DOS文本文件中的行。

In windows, the \n moves to the beginning of the next line. The \r moves to the beginning of the current line, without moving to the next line. I have used \r in my own console apps where I am testing out some code and I don't want to see text scrolling up my screen, so rather than use \n after printing out some text, of say, a frame rate (FPS), I will printf("%-10d\r", fps); This will return the cursor to the beginning of the line without moving down to the next line and allow me to have other information on the screen that doesn't get scrolled off while the framerate constantly updates on the same line (the %-10 makes certain the output is at least 10 characters, left justified so it ends up padded by spaces, overwriting any old values for that line). It's quite handy for stuff like this, usually when I have debugging stuff output to my console screen.

一点历史

/r代表返回或回车,它的历史归功于打字机。一个回车符将你的回车符一直向右移动,这样你就在行首输入了。

/n代表新行,同样,从打字的日子开始,你移动到新的行。但不一定要在开头,这就是为什么一些操作系统同时需要/r返回和/n换行符,因为打字机的换行顺序是这样的。这也解释了旧的8位计算机使用Return而不是Enter,从回车中返回,这是很熟悉的。

\r:回车̲return cr -返回行首回车 \n:换行(n̲ew Line) lf -纸上一行

在屏幕输出的上下文中:

CR:将光标返回到当前行的开头 “LF”:光标下移一行

例如:

你好,\n世界\r!

应该在您的终端上呈现为:

Hello,
!     world

一些操作系统可能会破坏预期行为的兼容性,但这不会改变“\n和\r之间的差异?”这个问题的答案。

更令人困惑的是,我一直在使用浏览器中的HTML页面中的TextArea元素编写一个简单的文本编辑器。考虑到CR/LF的兼容性问题,我编写了代码来检查平台,并使用适用于平台的换行符约定。

然而,当检查TextArea中包含的实际字符时,我发现了一些有趣的事情,通过一个小的JavaScript函数生成对应于字符的十六进制数据。

为了测试,我输入了以下文本:

你好,世界(输入)

再见,残酷的世界[进入]

当我检查文本数据时,得到的字节序列是这样的:

48 65 6c 6c 6f 2c 20 57 6f 72 6c 64 0a 47 6f 6f 64 62 79 65 2c 20 43 72 75 65 6c 20 57 6f 72 6c 64 0a

现在,大多数人看到这个,看到0a而没有0d字节,会认为这个输出是在Unix/Linux平台上获得的。但是,这里有一个问题:我在Windows 7 64位的谷歌Chrome中获得的这个序列。

因此,如果你正在使用一个TextArea元素并检查文本,检查输出,就像我上面所做的那样,以确保从你的TextArea返回的实际字符字节。我还没有看到这在其他平台或其他浏览器上是否有所不同,但如果您通过JavaScript执行文本处理,并且需要使该文本处理平台独立,那么就值得记住这一点。

上述文章中涉及的约定适用于控制台输出,但HTML元素似乎遵循UNIX/Linux约定。除非有人在不同的平台/浏览器上发现了其他情况。

因为没有人特别提到它(他们是不是太小了,不知道/不记得?)-我怀疑\r\n的使用起源于打字机和类似的设备。

当你在使用多行打字机时,想要打出新的一行,它必须执行两个物理操作:将滑架滑回页面的开头(在美国是左),并将纸张上一个缺口。

在行式打印机的时代,打印粗体文本的唯一方法,例如,是做一个没有换行符的回车,并在旧的字符上打印相同的字符,从而添加更多的墨水,从而使它看起来更暗(粗体)。当打字机的机械式“换行”功能失效时,令人讨厌的结果是:如果你不注意,你可能会把上一行文本敲过。