在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还是别的什么?我们怎么解释这个?
答案 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()
并且没有写任何新行。
在两者中,括号外的所有内容都与您的代码无关。也就是说,CRLF
符号是在WriteAllLines
调用中写一行的一部分。