問題 §
C#から出力したCSVがExcelで文字化けする
原因 §
ExcelはBOMなしUTF-8のCSVファイルを読み込むと適切に処理できない。BOMがあればOK。
File.CreateText APIなどで出力したファイルはBOMを付けない。
解決 §
writer.Write((char)0xfeff);
のようなコードを書き込みオープン直後に追加する。なお、このコードはUTF-8以外のUnicode出力でも有効。
注意 §
BOMを3バイトのシーケンスとして解説しているケースはUTF-8にしか通用しないことに注意。U+FEFFはUTF-8にすると3バイトのシーケンスになるだけである。文字列とバイト列を混用する出力は面倒くさいので、全て文字として解決する上記のコードの方がすっきりする。