为什么“\ n”在Windows上提供了一个新行?

时间:2012-04-05 19:12:26

标签: c# .net windows newline

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

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

5 个答案:

答案 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