C# 为什么使用记事本++;显示回车+;行馈送\r和\n

C# 为什么使用记事本++;显示回车+;行馈送\r和\n,c#,.net,notepad++,carriage-return,linefeed,C#,.net,Notepad++,Carriage Return,Linefeed,在C#中,定义以下4个变量: string s1 = "\r"; string s2 = "\n"; string CarriageReturn = (Convert.ToChar(13)).ToString(); string LineFeed = (Convert.ToChar(10)).ToString(); 然后通过在Notepad++中查看复制值并单击“显示所有字符”。有趣的是,您可以看到\r和\n之间没有区别,并且对于这两种情况,都显示了CR LF。 是虫子还是别的什么?我们如何解

在C#中,定义以下4个变量:

string s1 = "\r";
string s2 = "\n";
string CarriageReturn = (Convert.ToChar(13)).ToString();
string LineFeed = (Convert.ToChar(10)).ToString();
然后通过在Notepad++中查看复制值并单击“显示所有字符”。有趣的是,您可以看到\r和\n之间没有区别,并且对于这两种情况,都显示了CR LF。 是虫子还是别的什么?我们如何解释这一点

有趣的是,您可以看到\r和\n之间没有任何区别,对于这两种情况,这表明它是错误还是其他原因

这不是一个错误。CRLF是Windows中的默认值:对于非Unix平台,是包含“\r\n”的“字符串”,对于Unix平台,是包含“\n”的字符串

我们如何解释这一点

这可能是由于您将字符串值输出到文件的方式造成的。如果使用添加新行的方法,例如
writeAllines()
does,则在写入的每个值的末尾都会自动出现一个CRLF

例如,我们可以运行以下程序

string r = "\r";
string n = "\n";
string CarriageReturn = (Convert.ToChar(13)).ToString();
string LineFeed = (Convert.ToChar(10)).ToString();

var content = new string[] {
    $"(r:{r})", 
    $"(n:{n})", 
    $"(13:{CarriageReturn})", 
    $"(10:{LineFeed})" 
};

System.IO.File.WriteAllLines("output1.txt", content);
System.IO.File.WriteAllText("output2.txt", string.Join("", content));
它生成两个输出文件。左边的那个用
writeAllines
写了四行。右边的那个使用了
writealText()
,没有写任何新行


在这两种情况下,括号外的所有内容都独立于代码。也就是说,
CRLF
符号是在调用
writeAllines

时写一行的一部分,Windows行的结尾是CRLF,所以我猜记事本++会自动对每一行执行此操作。键入记事本+
testagaintry
(用键盘上的Enter键替换
)然后重复你的“显示所有角色”。你看到了什么?你到底是如何将这些值输入记事本++的?例如,您是否将值写入控制台并从控制台复制它们?或者,您是否在调试器窗口中查看这些值,然后将它们复制到记事本++?还是你在用另一种方式?你越具体,就越有可能有人会提供正确的答案。听起来他们一开始甚至没有输出到文件,只是复制调试器的值还是什么?您的writeAllines()示例仍然按原样编写每个CR和LF。嗯,不可能。复制值只是复制它们的字符串表示形式,而不是字符本身。