You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CsvHelper处理含双引号的.dat文件时字段拆分异常求助

问题原因

  1. 代码中错误地将字符串赋值给Quote属性(Quote是char类型,需用单引号指定字符),导致CsvHelper未正确识别自定义引号字符þ,仍默认把双引号当作字段引号处理,字段包含双引号时就会错误拆分。
  2. 未配置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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 23:24:53