TextFieldParser 是 C# 解析 CSV 最稳妥方案,需显式指定 UTF-8 编码、调用 SetDelimiters(",") 和设置 HasFieldsEnclosedInQuotes = true;大文件应改用 StreamReader + 状态机流式解析;避免 LINQ to CSV,推荐 CsvHelper(配 HeaderValidated 校验)或 DataTable;务必处理 BOM 与编码问题。
用TextFieldParserMicrosoft.VisualBasicSplit(',')StreamReader.ReadLine()new TextFieldParser("file.csv")TextFieldParserEncoding.DefaultEncoding.UTF8SetDelimiters(",")HasFieldsEnclosedInQuotes = true"John ""Doe"" Smith"using (var parser = new TextFieldParser("data.csv", Encoding.UTF8))
{
parser.SetDelimiters(",");
parser.HasFieldsEnclosedInQuotes = true;
while (!parser.EndOfData)
{
string[] fields = parser.ReadFields(); // 这才是安全的逐行取数组
}
}StreamReaderTextFieldParserDataTable.Load()StreamReader.ReadLine()File.ReadAllLines()String.Split()Microsoft.Data.SqlClientSystem.Text.JsonJsonDocument.ParseValue(ref)double.TryParse()Convert.ToDouble()LINQ to CSVLINQ to CSVNullReferenceExceptionSystem.Data.DataTableSqlBulkCopyNewtonsoft.JsonJsonConvert.DeserializeObject>()
CsvHelperCsvReadernew CsvConfiguration(CultureInfo.InvariantCulture)CsvHelperHeaderValidatedMissing field 'Email'EncodingEF BB BFTextFieldParserFile.ReadAllBytes()0xEF, 0xBB, 0xBFEncoding.UTF8Encoding.Defaultif (bytes[0] == 0xEF) throw new InvalidOperationException("BOM not allowed");NULL""