Windows上的换行标记应为CR+LF
,而在Unix上,它只是LF
。
所以当我使用像Console.Write("line1\nline2");
这样的东西时,为什么它会“正常”工作并给我两行?我希望这个\n
不起作用,只有\r\n
的组合才有效。
答案 0 :(得分:17)
'\ n'是换行符。传统上,它导致打印机将纸张卷起一行。 '\ r'是回车符,传统上会导致打印头移动到纸张的最左边缘。
在以这种方式解释字符的打印机和控制台上,line1\nline2
的输出将是
line1
line2
许多控制台(和编辑)会将'\ n'解释为您想要开始一个新行和将光标定位在该新行的开头。这就是你在这里看到的。
您应该使用Environment.NewLine而不是硬编码任何特定的常量。
答案 1 :(得分:9)
这只是底层Windows控制台的标准行为。如果将0x0A
输出到控制台,本机C应用程序将完全相同。
当然,你应该使用
Environment.NewLine
为您的新线路。
Environment.NewLine
在Windows上解析为\r\n
和Unix上的\n
类似系统。
答案 2 :(得分:1)
文件编码!= Console
解释。
换句话说,虽然CR
+ LF
的“Windows标准”存在于文件中,但仅LF
或\n
已导致相应的回车和控制台窗口中的新行解释。
答案 3 :(得分:1)
根据我的经验,当您使用WriteLine()输出到控制台时,它接受\ n转义字符。当您使用StreamWriter并调用WriteLine()时,它会使您键入\ r \ n以移动到新行。我假设控制台已被编程为接受\ n转义符而没有回车符\ r。
答案 4 :(得分:0)
\ n是换行符。在* nix和Windows系统上,它应该创建2行。 \ r \ n是回车符,它将书写工具移动到行的开头。
大多数现代控制台/编辑器都具有足够的弹性,可以将\ n解释为\ r \ n