为什么Notepad ++显示\ r和\ n的回车+换行符

时间:2018-02-16 02:37:35

标签: c# .net notepad++ carriage-return linefeed

在C#define 4变量中如下:

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

然后通过观察在Notepad ++中复制它们的值并单击"显示所有字符"。有趣的是你可以看到\ r和\ n之间没有区别,对于它们两者,它显示了CR LF。 这是一个bug还是别的什么?我们怎么解释这个?

1 个答案:

答案 0 :(得分:1)

  

有趣的是你可以看到与\ r和\ n没有区别,并且对于它们两者都显示CR LF这是一个bug还是别的什么?

这不是一个错误。 CRLF是Windows中Environment.NewLine的默认值:'字符串包含" \ r \ n"对于非Unix平台,或包含" \ n"的字符串对于Unix平台。'

  

我们如何解释这个?

这可能是由于您将字符串值输出到文件的方式。如果您使用添加新行的方法(例如WriteAllLines(),则会在您编写的每个值的末尾自动生成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));

它产生两个输出文件。左边的那个用WriteAllLines写了四行。右边的那个使用WriteAllText()并且没有写任何新行。

enter image description here

在两者中,括号外的所有内容都与您的代码无关。也就是说,CRLF符号是在WriteAllLines调用中写一行的一部分。