CsvHelper处理含双引号的.dat文件时字段拆分异常求助
问题原因
- 代码中错误地将字符串赋值给
Quote属性(Quote是char类型,需用单引号指定字符),导致CsvHelper未正确识别自定义引号字符þ,仍默认把双引号当作字段引号处理,字段包含双引号时就会错误拆分。 - 未配置
Escape字符,即使正确设置Quote,字段内的特殊字符也可能被错误解析。
解决方案
修改.dat文件的配置代码,修正Quote赋值方式,并配置Escape字符与Quote一致,确保CsvHelper仅将þ作为字段引号和转义字符,双引号被视为普通内容:
using (var reader = new StreamReader(datFilePath)) using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture)) { if (LoadFileExtn.ToLower() == ".dat") { csv.Configuration.Delimiter = "¶"; // 需与实际.dat文件的字段分隔符一致 csv.Configuration.Quote = 'þ'; // 修正为char类型赋值,指定字段包裹字符 csv.Configuration.Escape = 'þ'; // 设置转义字符为引号字符,处理字段内的þ csv.Configuration.QuoteMode = QuoteMode.OnlyDelimited; // 仅解析被þ包裹的字段 } else { csv.Configuration.Delimiter = "|"; } csv.Read(); csv.ReadHeader(); List<IDictionary<string, object>> dataRecords = csv.GetRecords<dynamic>() .Select(x => (IDictionary<string, object>)x) .ToList(); foreach (var record in dataRecords) { // 后续业务处理逻辑 } }
额外调整说明
- 若你的.dat文件实际字段分隔符是
þþ(从示例内容看字段间是þþ),请将Delimiter改为"þþ"。 - 若字段内不会出现
þ字符,可保持csv.Configuration.IgnoreQuotes = false(默认值),确保CsvHelper正确识别þ包裹的字段。 - 若仍有问题,可添加
csv.Configuration.DetectQuotes = false,强制禁用自动引号检测,仅使用配置的þ作为引号字符。
内容的提问来源于stack exchange,提问作者Mahadevan G
相关产品推荐
相关产品推荐

