2022年10月21日
川俣晶の縁側ソフトウェア技術雑記 total 1038 count

C#から出力したCSVがExcelで文字化けする (C#からの出力ファイルにBOMを付けたい)

Written By: 川俣 晶連絡先

問題 §

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バイトのシーケンスになるだけである。文字列とバイト列を混用する出力は面倒くさいので、全て文字として解決する上記のコードの方がすっきりする。