29

Windows 上的换行标记应该是CR+LF,而在 Unix 上,它只是LF.

所以当我使用类似的东西时Console.Write("line1\nline2");,为什么它会“正常”工作并给我两条线?我希望这\n不起作用,并且只有一个组合\r\n会起作用。

4

6 回答 6

33

'\n'是换行符。传统上,它会导致打印机将纸张卷起一行。'\r'是回车字符,传统上它会导致打印头移动到纸张的最左边缘。

在以这种方式解释字符的打印机和控制台上,输出line1\nline2将是

line1
     line2

许多控制台(和编辑器)会将 '\n' 解释为您要开始一个新行并将光标定位在该新行的开头。这就是你在这里看到的。

您应该使用Environment.NewLine而不是硬编码任何特定的常量。

于 2012-04-05T19:15:00.250 回答
14

这只是底层 Windows 控制台的标准行为。0x0A如果您输出到控制台,本机 C 应用程序将执行完全相同的操作。

当然,你应该使用Environment.NewLine你的新线路。在 Windows 和类 Unix 系统上Environment.NewLine解析为。\r\n\n

于 2012-04-05T19:55:49.973 回答
2

文件编码!=Console解释。

换句话说,虽然CR+的“Windows 标准”LF存在于文件中,但只有LF, or\n已经在控制台窗口中产生了适当的回车和换行解释。

于 2012-04-05T19:15:16.810 回答
2

我迟到了很多年。但是,https: //en.wikipedia.org/wiki/Newline 很好地解释了 NEWLINE 转义序列如何在编程语言和文本/二进制输出的上下文中工作。

归根结底 - 大多数编程语言在编写文本时将“\n”翻译成本机平台的 NEWLINE 序列。并且,在阅读文本时将原生平台的 NEWLINE 序列翻译成“\n”。

于 2021-08-26T00:07:10.520 回答
1

根据我的经验,当您使用 WriteLine() 输出到控制台时,它接受 \n 转义字符。当您使用 StreamWriter 并调用 WriteLine() 时,它会让您键入 \r\n 以移动到新行。我假设控制台已被编程为接受 \n 转义字符而没有回车 \r。

于 2012-04-05T19:23:58.407 回答
0

\n 是换行符。在 *nix 和 Windows 系统上,它应该创建 2 行。\r 是回车,它将书写工具移动到行首。

大多数现代控制台/编辑器都具有足够的弹性,可以将 \n 解释为 \r\n

于 2012-04-05T19:23:22.760 回答