【C#】UTF-8のBOMあり/BOMなしの指定

UTF-8はBOMの有無があり時と場合によって適切に選択する必要があります。

// BOMあり
Encoding bom = System.Text.Encoding.UTF8;
// BOMなし
Encoding withoutBom = System.Text.UTF8Encoding(false);

取得方法に対称性が無いのが気になるので Utility 化してみました。

// UTF8.cs

using System.Text;

public static class UTF8
{
    static UTF8Encoding? _utf8withoutBom;

    // UTF8エンコードを取得します。
    // true: BOMあり / false: BOMなし
    public static Encoding GetEncoding(bool useBom)
    {
        return useBom
            ? Encoding.UTF8
            : _utf8withoutBom ??= new UTF8Encoding(false);
    }
}

// ★使い方 - - - - -

// BOMあり
Encoding bom = UTF8.GetEncoding(true);
// BOMなし
Encoding withoutBom = UTF8.GetEncoding(false);