目次
はじめに
C#で.thdファイルを.csvファイルに変換するプログラムを作っていたとき、
出力されたCSVファイルに含まれる「カタカナ・ひらがな・漢字」がすべて文字化けして困りました。
今回はその原因と、文字化けを防ぐエンコーディング指定の方法を勉強したので備忘録としてまとめます。
私の環境
- OS:Windows 10 Pro
- バージョン:20H2
- 開発言語:C#
- 出力ファイル:CSV形式(.csv)
結論:Encodingを明示的に指定する
文字化けの原因は、エンコーディング(文字コード)の不一致でした。StreamWriterで出力時に適切なエンコーディングを指定していなかったのが問題です。
実装例:Shift_JISでエンコーディング指定
以下のように、読み込み(StreamReader)と書き出し(StreamWriter)の両方でエンコーディングを指定することで文字化けは防げました。
// .thdファイルの読み込み(Shift_JISで指定)
StreamReader reader = new StreamReader("input.thd", Encoding.GetEncoding("Shift_JIS"));
// .csvファイルへの書き出し(Shift_JISで指定)
StreamWriter writer = new StreamWriter("output.csv", false, Encoding.GetEncoding("Shift_JIS"));
注意点:StreamWriter側の指定を忘れがち
私の場合、読み込み側(StreamReader)ばかり気にしていて、
出力側(StreamWriter)のエンコーディングをデフォルトのままにしていたことが原因でした。
その結果、日本語の部分だけがすべて「??」や意味不明な記号になってしまうというトラブルに見舞われました。
他のエンコーディング例(環境によっては変更)
もしShift_JISでうまくいかない場合は、以下のようなエンコーディングも試す価値があります:
- Encoding.UTF8(BOM付き or なしに注意)
- Encoding.GetEncoding("EUC-JP")(一部のレガシー環境で使用)
- Encoding.Default(OS依存だが安定)
まとめ
.thdファイルなど、日本語が含まれるテキストファイルをCSVに出力する際は、StreamWriterとStreamReaderの両方で文字コード(Encoding)を明示的に指定することが重要です。
ポイント:
- 日本語の文字化けはエンコーディングミスが原因
- C#では Encoding.GetEncoding("Shift_JIS")がWindowsと相性が良い
- 書き込み側の StreamWriterにもエンコーディングを忘れずに設定
地味な部分ですが、文字化けは一度ハマると面倒なので、最初から設定しておくと安心です。

 
			 
			 
			 
			 
			 
			 
			