###前提・実現したいこと
CSVファイルを読み込んで内容をDataGridViewに表示したい。
その際、CSVファイルの文字コードを判別して読み込むことで文字化けを防止したい。
最終的に実現したいことは上記のことなのですが、
事前検証しているときにわからない現象が発生しました。
###発生している問題・エラーメッセージ
メモ帳を使って、2つの文字コード(ANCI(Shift_JIS)とUTF-8)のファイルを作成しました。
[CSVファイルの内容]
1,2
あ,い
以下の4パターンでTextFieldParserメソッドにてエンコーディングを指定して
CSVファイルを読み込んだところ以下の結果が得られました。
1 ファイルの文字コード:ANCI エンコーディング:Shift_JIS ⇒ 文字化けなし
2 ファイルの文字コード:ANCI エンコーディング:UTF-8 ⇒ 文字化けする(2行目の"あ,い"が文字化け)
3 ファイルの文字コード:UTF-8 エンコーディング:Shift_JIS ⇒ 文字化けなし
4 ファイルの文字コード:UTF-8 エンコーディング:UTF-8 ⇒ 文字化けなし
2については文字コードとエンコーディングが違うので文字化けすること想定どおりです。
ところが3については文字コードとエンコーディングが違うのに文字化けしません。
なぜ、文字化けしないのか教えていただけませんか?
###該当のソースコード
//DataGricViewにCSVから読み込んだ内容を表示 private void button1_Click(object sender, EventArgs e) { //ANCIかUTF-8で保存したCSVファイルを指定 dataGridView1.DataSource = ImportCSV("csv.txt"); } /// <summary> /// ファイル取込 /// </summary> /// <param name="filename">ファイルパス</param> private DataTable ImportCSV(string filename) { //TextFieldParserメソッドでエンコーディング(Shift_JISかUTF-8)を指定 using (var parser = new TextFieldParser(filename, System.Text.Encoding.GetEncoding("Shift_JIS"))) { var dt = new DataTable(); parser.TextFieldType = FieldType.Delimited; parser.SetDelimiters(","); parser.HasFieldsEnclosedInQuotes = true; //DataTableに値をセット(処理は省略) return dt; } }
###補足情報(言語/FW/ツール等のバージョンなど)
Visual Studio 2015
.NET Framework4

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/11/15 03:56