为什么“ “在 Windows 上换行?

问题描述 投票:0回答:7

Windows 上的换行标记应该是

CR+LF
,而在 Unix 上,它只是
LF

那么当我使用像

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

c# .net windows newline
7个回答
37
投票

'\n'
是换行符。传统上,它使打印机将纸张卷起一行。
'\r'
是回车符,传统上它会导致打印机头移动到纸张的最左边缘。

在以这种方式解释字符的打印机和控制台上,

line1\nline2
的输出将是

line1
     line2

许多控制台(和编辑器)都会解释' ' 表示您想要开始一个新行 并将光标定位在该新行的开头。这就是你在这里看到的。

您应该使用

Environment.NewLine 而不是硬编码任何特定常量。


15
投票
这只是底层 Windows 控制台的标准行为。如果您将

0x0A

 输出到控制台,本机 C 应用程序将执行完全相同的操作。 

当然,您应该使用

Environment.NewLine

 作为新线路。 Environment.NewLine
 在 Windows 上解析为 
\r\n
,在类 Unix 系统上解析为 
\n


5
投票
我参加聚会已经迟到很多年了。然而,

https://en.wikipedia.org/wiki/Newline很好地解释了 NEWLINE 转义序列如何在编程语言和文本/二进制输出的上下文中工作。

归结为这一点 - 大多数编程语言都会翻译“ ” 在写入文本时转换为本地平台的 NEWLINE 序列。并且,将本地平台的 NEWLINE 序列翻译为“ “阅读文字时。


2
投票
文件编码!=

Console

解释。

换句话说,虽然文件存在

CR

 + 
LF
 的“Windows 标准”,但仅 
LF
\n
 已在控制台窗口中产生适当的回车符和新行解释。


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


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

大多数现代控制台/编辑器都具有足够的弹性来解释 作为


0
投票
对于那些寻找 NodeJS 解决方案的人,您可以使用:

import { EOL } from "os";


或:

const { EOL } = require("os");


EOL 的值为:

  • \n
     POSIX 
  • \r\n
     在 Windows 上
© www.soinside.com 2019 - 2024. All rights reserved.