dotnetfiddle.net 在某些情况下将换行符生成为 \n 而不是 \r\n

dotnetfiddle.net produces newline as \n instead of \r\n in some cases

在测试 dotnetfiddle.net 中的一些片段时,我注意到了一个奇怪的现象。

如果 verbatim string literal(字符串从 @" 开始)包含换行符,编译器在输出字符串中将换行符作为 \n 而不是 \r\n。 (例如 Environment.NewLine 在所有情况下都会生成 \r\n)。

下面的示例代码也可以在 https://dotnetfiddle.net/53qGTM:

中找到
string verbatimString = @"L1
L2";

string normalString = @"L1" + Environment.NewLine + "L2";

Console.WriteLine("=====Verbatim=====");
foreach (char c in verbatimString)
{
    Console.WriteLine("ascii:" + (int)c + ", char:" + c);
}

Console.WriteLine("=====Normal=====");
foreach (char c in normalString)
{
    Console.WriteLine("ascii:" + (int)c + ", char:" + c);
}

输出:

=====Verbatim=====
ascii:76, char:L
ascii:49, char:1
ascii:10, char:

ascii:76, char:L
ascii:50, char:2
=====Normal=====
ascii:76, char:L
ascii:49, char:1
ascii:13, char: 
ascii:10, char:

ascii:76, char:L
ascii:50, char:2

在 Visual Studio 中编译相同的代码时,换行符在两种情况下都是正确的 \r\n。它似乎是 dotnetfiddle-compiler 中的错误,是这样吗?

在做一些调查的同时,我也做了一个假设,我也会首先回答这个问题as recommended

dotnetfiddle.net在后端执行代码编译和执行。当 运行 代码片段时,代码编辑器 Web 视图将代码作为 json 发送到后端,并作为 json 接收输出。

作为我的代码执行的一部分,发送了以下 json 字符串(在 chrome 开发工具中获取):

"CodeBlock": "using System;\n\npublic class Program\n{\n\tpublic static void Main()\n\t{\n\t\tstring verbatimString = @\"L1\nL2\";\n\t\tstring normalString = @\"L1\" + Environment.NewLine + \"L2\";\n\t\tConsole.WriteLine(\"=====Verbatim=====\");\n\t\tforeach (char c in verbatimString)\n\t\t{\n\t\t\tConsole.WriteLine(\"ascii:\" + (int)c + \", char:\" + c);\n\t\t}\n\n\t\tConsole.WriteLine(\"=====Normal=====\");\n\t\tforeach (char c in normalString)\n\t\t{\n\t\t\tConsole.WriteLine(\"ascii:\" + (int)c + \", char:\" + c);\n\t\t}\n\t}\n}"

在 json 的一部分中,我的 verbatingString-变量定义如下: string verbatimString = @\"L1\nL2\";

我的字符串文字中嵌入了标准 json 换行符 \n。似乎 dotnetfiddle 后端对给定的字符串文字没有任何转换。 它按字面意思接受字符串文字(双关语意)。