为什么“\ n”在Windows上换行?

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作为你的新行。 Environment.NewLine在Windows上解析为\r\n \n在Unix上解析为\r\n \n ,就像系统一样。

文件编码!= Console解释。

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

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

大多数现代游戏机/编辑器都足够有弹性来将\ n解释为\ r \ n

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