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 の2文字ではなく、その制御文字を文字列に格納します。内容を直接指定するテキストに便利です。\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 を使います。

C# の改行を ASP.NET で HTML の <br> に変換する

改行を含むテキストをHTMLとして表示するには、まずテキストをHTMLエンコードし、その後で改行シーケンスを <br> に置き換えます。CRLFを単独のCRやLFより先に処理すれば、Windows形式の改行1つがHTMLの改行1つになります。次の例では固定のサンプル文字列を使っています。リクエストやユーザーが入力したテキストを扱う場合も、マークアップの注入を防ぐため、エンコードの手順を省かないでください。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;