Windows回车返回\ r \ n是由两个字符还是一个字符组成?


Answers:


113

这是两个字符:

  • \r 是回车;
  • \n 是换行符。

两个字符组合起来代表Windows上的新行。而在Linux上,则\n代表了换行符。它将光标移动到Linux上新行的开头。在Windows上,光标将停留在控制台的同一列,但在下一行。

\r在Linux上的效果与在Windows上的效果相同:将光标移至该行的开头。可以在\r代替的同一行上打印不同的信息\n


3
+1。作为OP的附加信息:Newline
informatik01

7

实际上\r is 0x0D (^M) and \n is 0x0A (^J),但是.....在Windows上:

\n will write 0x0D 0x0A

在Unix上:

\r will write 0x0D
\n will write 0x0A

因此,在Windows上,如果我们想向下移动1行,同时保持在同一列中,则应该显式打印\ x0A?
2012年

如果我是对的,那是由于打开文件作为文本流时发生了字符转换。将其stdout视为二进制流而不是文本流将导致仅\n编写0x0A而不是0x0D 0x0A在Windows上编写。参见@FredFoo的答案。
loxaxs

6

取决于设置。\r\n是两个字节宽(在ASCII,UTF-8,等等),但是I / O库如C'Sstdio库和其他人,在文本模式下操作时,可能会之间进行转换\n\r\n准透明。

即,在Windows平台上,一个C程序读取文本模式流txt_in

while ((c = getc(txt_in)) != EOF)
    printf("%02x\n", c);

不会报告的ASCII码\r。相反,putc('\n', txt_out)实际上将写入\r\n文本模式流txt_out


5

Windows不能区分\r\n其他两个字符。但是,在一种情况下,它被视为一个字符:如果使用C运行时并以文本形式打开文件,则\r\n该文件将被读取为\n\n并将被写入该文件\r\n



0

我在Windows上进行了一些测试(没有什么花哨)用记事本++和崇高文本2,和事实证明,\r并且\n确实是2个不同的角色,但...

按下Return\r时,可能会插入不同的文本编辑器,也可能不会插入。

在文本编辑器中尝试以下操作:

1
2
3
4
5

然后按Ctrl + F,启用正则表达式并搜索\r。根据您的文本编辑器及其设置,您可能在每一行的末尾“命中”或“不命中”一个字符。如果以上文本是从其他编辑器复制粘贴的,则行为也可能有所不同...

一些文本编辑器允许在其设置中进行自定义,您可以在其中指定按回车键时是插入\r\n还是unix样式。最重要的是,它们可能允许您选择在保存文件之前通过剥离或插入字符来强制实施一致的样式。\n\r


4
您不应该依赖文本编辑器,因为其中一些在加载文件时可能会做一些魔术。验证的正确方法是在十六进制编辑器中打开文件。
Telemat
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.