プログラムを中心とした個人的なメモ用のブログです。 タイトルは迷走中。
内容の保証はできませんのであしからずご了承ください。

2019/12/09

[C#] 用途に応じた特殊文字のエスケープ・エンコード

event_note2019/12/09 5:34

特殊文字はエスケープしたりエンコードしたりする必要がありますが、どの文字が特殊文字にあたるかは用途に応じて異なり、その用途に応じてエスケープやエンコードの方法やメソッドも変わってきます。

環境

  • .NET Core 2.2

C# コード中のエスケープ

ファイルパスなど表す場合、文字列中の ¥ をエスケープする必要がありますが、@ を使えばエスケープが不要になります。

using System;
   
public class Program
{
    public static void Main()
    {
        var str = @"C:\path\hoge";
        Console.WriteLine(str);
    }
}

実行結果

C:\path\hoge

正規表現で使用する文字をエスケープ

正規表現で使用される文字をエスケープしたい場合は Regex.Escape を使います。
半角スペースと ().*[]!#%$ の文字をエスケープしてくれます。

using System;
using System.Text.RegularExpressions;
   
public class Program
{
    public static void Main()
    {
        var str = Regex.Escape("().*[]!#%$");
        Console.WriteLine(str);
    }
}

実行結果

\ \(\)\.\*\[]!\#%\$

HTML で使用する文字をエンコード

HTML で使用する < > & などの文字をエンコードしたい場合、HttpUtility.HtmlEncode を使用します。

using System;
using System.Web;

public class Program
{
    public static void Main()
    {
        var str = HttpUtility.HtmlEncode("<\">&'");
        Console.WriteLine(str);
    }
}

実行結果

&lt;&quot;&gt;&amp;&#39;

JavaScript で使用する文字をエンコード

Razor を使っていると、C# で JavaScript のコードを出力することもあります。
このようなときは HttpUtility.JavaScriptStringEncode を使って '" をエンコードできます。

using System;
using System.Web;

public class Program
{
    public static void Main()
    {
        var str = HttpUtility.JavaScriptStringEncode("'");
        Console.WriteLine(str);
    }
}

実行結果

\u0027