.NET Core 3.0以降、Shift-JISエンコーディング(コードページ932)はデフォルトでサポートされなくなりました。そのため、カスタムエンコーディングプロバイダーを登録する必要があります。
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
class Program
{
static void Main()
{
string csvFilePath = "your_csv_file.csv";
// カスタムエンコーディングプロバイダーを登録
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
// ファイルのエンコーディングを判断する
Encoding encoding = GetFileEncoding(csvFilePath);
// CSVファイルを読み込む
var lines = File.ReadAllLines(csvFilePath, encoding).Skip(1); // ヘッダーをスキップ
foreach (var line in lines)
{
var values = line.Split(',');
string code = values[0].Trim();
string name = values[1].Trim();
string market = values[2].Trim();
string type = values[3].Trim();
// ここでcode、name、market、typeを使用できます
}
}
static Encoding GetFileEncoding(string filePath)
{
// ファイルの先頭からバイトを読み取り、エンコーディングを判断する
byte[] bom = new byte[4];
using (var fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
{
fileStream.Read(bom, 0, 4);
}
if (bom[0] == 0xEF && bom[1] == 0xBB && bom[2] == 0xBF)
{
return Encoding.UTF8;
}
else if (bom[0] == 0xFF && bom[1] == 0xFE)
{
return Encoding.Unicode; // UTF-16 LE
}
else if (bom[0] == 0xFE && bom[1] == 0xFF)
{
return Encoding.BigEndianUnicode; // UTF-16 BE
}
else
{
return Encoding.GetEncoding(932); // Shift-JIS
}
}
}