.net 为什么Windows上的“\n”给予新的一行?

z31licg0  于 2023-10-21  发布在  .NET
关注(0)|答案(7)|浏览(105)

在Windows上,换行符应该是CR+LF,而在Unix上,它只是LF
那么当我使用像Console.Write("line1\nline2");这样的东西时,为什么它会“正常”工作并给我给予两行呢?我希望这个\n不工作,只有\r\n的组合才能工作。

drkbr07n

drkbr07n1#

'\n'是换行符。传统上,它会导致打印机将纸张向上卷起一行。'\r'是回车字符,传统上会导致打印头移动到纸张的最左边。
在以这种方式解释字符的打印机和控制台上,line1\nline2的输出将是

line1
     line2

许多控制台(和编辑器)会将'\n'解释为您想要开始一个新行 * 并将光标定位在新行的开头。这就是你在这里看到的。
您应该使用Environment.NewLine,而不是硬编码任何特定的常量。

eaf3rand

eaf3rand2#

这只是底层Windows控制台的标准行为。如果您将0x0A输出到控制台,原生C应用程序将执行完全相同的操作。
当然,您应该为新行使用Environment.NewLineEnvironment.NewLine在Windows上解析为\r\n,在类Unix系统上解析为\n

s6fujrry

s6fujrry3#

我迟到了很多年。然而,https://en.wikipedia.org/wiki/Newline很好地解释了NEWLINE转义序列在编程语言和文本/二进制输出的上下文中是如何工作的。
它归结为-大多数编程语言在编写文本时将“\n”转换为本地平台的NEWLINE序列。并且,在阅读文本时将本机平台的NEWLINE序列翻译为“\n”。

pbgvytdp

pbgvytdp4#

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

eivgtgni

eivgtgni5#

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

km0tfn4u

km0tfn4u6#

\n是换行符。在 *nix和Windows系统上,它应该创建2行。\r是回车符,它将书写工具移动到行首。
大多数现代控制台/编辑器都具有足够的弹性,可以将\n解释为\r\n

9w11ddsr

9w11ddsr7#

对于那些寻找NodeJS解决方案的人,你可以使用:用途:
import { EOL } from "os";
或:
const { EOL } = require("os");
EOL的值为:

  • POSIX上的\n
  • Windows上的\r\n

相关问题