HOWTO · Csharp

C# 中的回车

在本文中,我们将学习 C# 中字符串中的回车。

本页内容

在 C# 中,写入控制台时使用 Console.WriteLine();需要在字符串中插入换行时使用 \n;构造应遵循当前平台换行约定的文本时使用 Environment.NewLine。回车符(\r)和换行符(\n)是不同的控制字符;应根据文件格式或接收系统的要求选择相应的序列。

使用 Console.WriteLine() 输出一行或空行

Console.WriteLine(value) 会先写入该值,再追加控制台的行终止符。不带参数的形式只写入行终止符,因此会在前后文本之间产生一个空行。行终止符是在输出时追加的,不会修改传给方法的字符串。

运行以下示例:

本节中的代码以及显示的标签或输出仍为英文。

using System;

class Program
{
    static void Main()
    {
        Console.WriteLine("First line");
        Console.WriteLine();
        Console.WriteLine("Second line");
    }
}
First line

Second line

在 C# 字符串中插入 \n

在普通的 C# 字符串字面量中,\n 是表示换行符的转义序列。把它放在需要换行的位置即可;编译器存储的是换行字符,而不是反斜杠和字母 n 这两个可见字符。这种写法适用于由你直接控制的文本。\x0A 也能表示同一个字符,不过通常 \n 更容易辨认。在逐字字符串中,转义序列不会被解析;要使用这种写法,请改用普通字符串字面量。

本节中的代码以及显示的标签或输出仍为英文。

using System;

class Program
{
    static void Main()
    {
        string message = "First line\nSecond line";
        Console.WriteLine(message);
    }
}
First line
Second line

使用 Environment.NewLine 表示当前平台的换行符

构造字符串时,如果行分隔符应遵循当前环境的约定,请使用 Environment.NewLine。它会提供当前环境的换行序列。这适用于面向特定平台的文本文件和拼接出的消息,但不能因此保证文本适用于所有协议:HTTP、不同 CSV 格式或远程服务等可能规定各自的行结束规则。Console.WriteLine() 在写入时也会独立追加行终止符;因此,如果先在字符串中加入 Environment.NewLine,再调用 WriteLine(),末尾可能会多出一个换行。

本节中的代码以及显示的标签或输出仍为英文。

using System;

class Program
{
    static void Main()
    {
        string message = "First line" + Environment.NewLine + "Second line";
        Console.WriteLine(message);
    }
}
First line
Second line

根据含义选择 \n、\r、\r\n 或 \x0A

\n 表示换行符(LF),\r 表示回车符(CR)。从历史上看,CR 会将位置移回行首,LF 会前进到下一行;许多文本系统将单独的 LF 视为行结束符,而 Windows 文本通常使用 CRLF(\r\n)。较早的系统也曾单独使用 CR。这些是不同的约定,不能把它们当作可互换的写法:应根据目标系统的要求选择表示方式,尤其是在写入协议或文件格式时。在 C# 字符串字面量中,\x0A 表示与 \n 相同的 LF 字符;普通换行通常优先使用更直观的 \n。只有在确实需要遵循当前平台约定时,才使用 Environment.NewLine。

在 ASP.NET 中将 C# 换行符转换为 HTML <br>

要将带换行的文本作为 HTML 呈现,先对文本进行 HTML 编码,再把换行序列替换为 <br>。应先匹配 CRLF,再匹配单独的 CR 或 LF,这样一个 Windows 行结束符只会生成一个 HTML 换行。示例仅使用固定的样本文本;处理请求数据或用户输入时,应保留编码步骤以防止标记注入。在 ASP.NET 中,应优先使用目标视图技术提供的常规输出编码功能。

本节中的代码以及显示的标签或输出仍为英文。

using System;
using System.Net;
using System.Text.RegularExpressions;

class Program
{
    static void Main()
    {
        string input = "First line\r\nSecond <line>";
        string encoded = WebUtility.HtmlEncode(input);
        string html = Regex.Replace(encoded, @"\r\n|\r|\n", "<br>");
        Console.WriteLine(html);
    }
}
First line<br>Second &lt;line&gt;