Windows 上的换行标记应该是
CR+LF
,而在 Unix 上,它只是 LF
。
那么当我使用像
Console.Write("line1\nline2");
这样的东西时,为什么它会“正常”工作并给我两行?我预计这个 \n
不起作用,只有 \r\n
的组合才能起作用。
'\n'
是换行符。传统上,它使打印机将纸张卷起一行。 '\r'
是回车符,传统上它会导致打印机头移动到纸张的最左边缘。
在以这种方式解释字符的打印机和控制台上,
line1\nline2
的输出将是
line1
line2
许多控制台(和编辑器)都会解释' ' 表示您想要开始一个新行 并将光标定位在该新行的开头。这就是你在这里看到的。
您应该使用Environment.NewLine 而不是硬编码任何特定常量。
0x0A
输出到控制台,本机 C 应用程序将执行完全相同的操作。当然,您应该使用 作为新线路。
Environment.NewLine
在 Windows 上解析为
\r\n
,在类 Unix 系统上解析为
\n
。
https://en.wikipedia.org/wiki/Newline很好地解释了 NEWLINE 转义序列如何在编程语言和文本/二进制输出的上下文中工作。
归结为这一点 - 大多数编程语言都会翻译“ ” 在写入文本时转换为本地平台的 NEWLINE 序列。并且,将本地平台的 NEWLINE 序列翻译为“ “阅读文字时。
Console
解释。换句话说,虽然文件存在
CR
+
LF
的“Windows 标准”,但仅
LF
或
\n
已在控制台窗口中产生适当的回车符和新行解释。
大多数现代控制台/编辑器都具有足够的弹性来解释 作为
import { EOL } from "os";
const { EOL } = require("os");
\n
POSIX
\r\n
在 Windows 上