Windows 上的换行标记应该是CR+LF
,而在 Unix 上,它只是LF
.
所以当我使用类似的东西时Console.Write("line1\nline2");
,为什么它会“正常”工作并给我两条线?我希望这\n
不起作用,并且只有一个组合\r\n
会起作用。
'\n'
是换行符。传统上,它会导致打印机将纸张卷起一行。'\r'
是回车字符,传统上它会导致打印头移动到纸张的最左边缘。
在以这种方式解释字符的打印机和控制台上,输出line1\nline2
将是
line1
line2
许多控制台(和编辑器)会将 '\n' 解释为您要开始一个新行并将光标定位在该新行的开头。这就是你在这里看到的。
您应该使用Environment.NewLine而不是硬编码任何特定的常量。
这只是底层 Windows 控制台的标准行为。0x0A
如果您输出到控制台,本机 C 应用程序将执行完全相同的操作。
当然,你应该使用Environment.NewLine
你的新线路。在 Windows 和类 Unix 系统上Environment.NewLine
解析为。\r\n
\n
文件编码!=Console
解释。
换句话说,虽然CR
+的“Windows 标准”LF
存在于文件中,但只有LF
, or\n
已经在控制台窗口中产生了适当的回车和换行解释。
我迟到了很多年。但是,https: //en.wikipedia.org/wiki/Newline 很好地解释了 NEWLINE 转义序列如何在编程语言和文本/二进制输出的上下文中工作。
归根结底 - 大多数编程语言在编写文本时将“\n”翻译成本机平台的 NEWLINE 序列。并且,在阅读文本时将原生平台的 NEWLINE 序列翻译成“\n”。
根据我的经验,当您使用 WriteLine() 输出到控制台时,它接受 \n 转义字符。当您使用 StreamWriter 并调用 WriteLine() 时,它会让您键入 \r\n 以移动到新行。我假设控制台已被编程为接受 \n 转义字符而没有回车 \r。
\n 是换行符。在 *nix 和 Windows 系统上,它应该创建 2 行。\r 是回车,它将书写工具移动到行首。
大多数现代控制台/编辑器都具有足够的弹性,可以将 \n 解释为 \r\n