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。