ASP.NETでUTF-8BOM付きテキストファイルをダウンロードさせる方法

ASP.NETでUTF-8BOM付きテキストファイルをダウンロードさせる方法

Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", "attachment; filename=Sample.txt");

//BOMを送信(ココが今回のポイント)
byte[] bom = System.Text.Encoding.UTF8.GetPreamble();
Response.BinaryWrite(bom);

//本文を送信
string text = "サンプルテキスト";
Response.BinaryWrite(Encoding.UTF8.GetBytes(text));

Response.End();

どんな状況で、こんなものが必要になることがあるかというと、
ASP.NETでクライアントにテキストファイルをダウンロードさせる場合、
クライアントのOSがWindowsであれば、
Shift-JISのファイルをダウンロードさせれば、OS標準のエディタで開けますが、
同じファイルをMacで開こうとすると、
OS標準のエディタでは、Shift-JISを開けるように設定しないと開けません。
じゃあ、UTF-8であれば開くのでは?と思ってエンコードだけをUTF-8(BOMなし)にしても、
設定変更しないと開けません。
そこで、UTF-8BOM付きであれば、WindowsでもMacでもOS標準のエディタで
特別な設定なしに開けます。(古いOSを除く。)
で、BOMってどうやって付けるの?ってことで今回の内容です。