質問: true; //DataTableに値をセット(処理は省略) return dt; } } ``` ### 補足情報(言語/FW/ツール等のバージョンなど) Visual Studio 2015 .NET Framework4
回答: TextFieldParser コンストラクタ (String, Encoding) の説明(抜粋下記)の通りの動作になっているのでしょう。 "detectEncoding パラメータが True の場合、このコンストラクタは、ファイルやストリームの先頭 3 バイトを確認してエンコーディングの検出を試みます。UTF-8、リトル エンディアン Unicode、ビッグ エンディアン Unicode の各テキストは、ファイルがそれぞれに対応するバイト順マークで開始される場合には自動的に認識されます。それ以外の場合は、defaultEncoding で指定されたエンコーディングが使用されます。" 上記の説明に書いてある detectEncoding パラメータはデフォルトで true です。 質問者さんの例で 2 が文字化けするのは、Shift_JIS には BOM は付与されてない ⇒ 自動認識できない ⇒ エンコーディングに UTF-8 が指定されてる ⇒ Shift_JIS を UTF-8 と解釈する ⇒ 日本語(ASCII 文字以外)は文字化けする・・・ということのはずです。 #StreamReader も同じ動作になります。このあたりは覚えておくと良いと思います。