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

C#读取含特殊字符CSV文件时CsvHelper、LumenWorksCsvReader报错求助

C#读取含特殊字符CSV文件的解决方案

解析报错核心原因是转义规则不匹配:RFC4180标准规定CSV中字段内的双引号需要用连续两个双引号转义,但你提供的CSV样例中使用了反斜杠\转义双引号(14\"),两款库默认遵循标准转义规则,因此识别出错。

方案1:调整LumenWorksCsvReader配置适配转义规则

直接在初始化时指定转义字符为反斜杠即可,修改后代码如下:

// 先引入命名空间:using LumenWorks.Framework.IO.Csv; using System.IO; using System.Text;
using (CsvReader csv = new CsvReader(new StreamReader(path, Encoding.UTF8), true))
{
    // 新增配置:指定转义字符为反斜杠
    csv.Escape = '\\';
    int fieldCount = csv.FieldCount;
    string[] headers = csv.GetFieldHeaders();
    while (csv.ReadNextRecord())
    {
        for (int i = 0; i < fieldCount; i++)
            Console.Write(string.Format("{0} = {1};", headers[i], csv[i]));
        Console.WriteLine();
    }
}

方案2:调整CsvHelper配置适配转义规则

如果使用CsvHelper,同样修改配置项即可适配反斜杠转义规则,示例代码如下:

// 先引入命名空间:using CsvHelper; using CsvHelper.Configuration; using System.Globalization; using System.Text;
var config = new CsvConfiguration(CultureInfo.InvariantCulture)
{
    // 指定转义字符为反斜杠
    Escape = '\\',
    AllowComments = false,
    TrimOptions = TrimOptions.None
};
using (var reader = new StreamReader(path, Encoding.UTF8))
using (var csv = new CsvReader(reader, config))
{
    // 读取所有记录
    var records = csv.GetRecords<dynamic>().ToList();
    foreach (var record in records)
    {
        Console.WriteLine($"InvoiceDate = {record.InvoiceDate}; Device = {record.Device};");
    }
}

额外注意事项

  • 代码中的Encoding.UTF8请替换为你CSV文件实际使用的编码,中文系统生成的CSV通常是GB2312/GBK编码,可改为Encoding.GetEncoding("GBK")
  • 如果可以调整CSV生成规则,建议改为符合RFC4180标准的连续双引号转义(即把14\"改为14""),兼容性更强

内容的提问来源于stack exchange,提问作者Manish Jain

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 17:06:05