【C#】.thdファイルを.csvに変換したら文字化けした話|エンコーディング指定で解決【Shift_JIS】

目次

はじめに

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に出力する際は、
StreamWriterStreamReaderの両方で文字コード(Encoding)を明示的に指定することが重要です。

ポイント:

  • 日本語の文字化けはエンコーディングミスが原因
  • C#では Encoding.GetEncoding("Shift_JIS") がWindowsと相性が良い
  • 書き込み側の StreamWriter にもエンコーディングを忘れずに設定

地味な部分ですが、文字化けは一度ハマると面倒なので、最初から設定しておくと安心です。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次