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

csv-parser配置delimiter参数解析分号分隔CSV文件问题

问题描述

现有一份采用分号作为分隔符的CSV文件。
若将文件内所有分号替换为逗号即可正常完成解析,但需求为直接以分号为分隔符解析该CSV文件,当前实现代码如下:

const csv = require('csv-parser')
const fs = require('fs')
const results = [];

fs.createReadStream('public/event-list/event-list.csv')
  .pipe(csv({delimiter: ';'}))
  .on('data', (data) => results.push(data))
  .on('end', () => {
  
    res.render('results-page', {
      title: 'Results',
      eventsData:results
    })
  });
解决方案

分隔符配置不生效的核心原因是参数名使用错误:csv-parser 2.0及以上版本中,自定义分隔符的配置字段为separator,而非代码中写的delimiter,直接修改传入csv()的配置项即可正常解析分号分隔的文件:

.pipe(csv({ separator: ';' }))

如果修改参数后仍然存在第一列字段名带乱码、解析结果错位的问题,是因为CSV文件带UTF-8 BOM头,额外加一个BOM处理的转换流即可,不需要修改原文件:

const csv = require('csv-parser')
const fs = require('fs')
const { Transform } = require('stream')
const results = [];

// 剥离UTF-8 BOM头的转换流
const removeBom = new Transform({
  transform(chunk, enc, cb) {
    if (this.isFirstChunk) {
      chunk = chunk[0] === 0xEF && chunk[1] === 0xBB && chunk[2] === 0xBF ? chunk.slice(3) : chunk
      this.isFirstChunk = false
    }
    cb(null, chunk)
  }
})
removeBom.isFirstChunk = true

fs.createReadStream('public/event-list/event-list.csv')
  .pipe(removeBom)
  .pipe(csv({ separator: ';' }))
  .on('data', (data) => results.push(data))
  .on('end', () => {
    res.render('results-page', {
      title: 'Results',
      eventsData:results
    })
  });

注意:不建议使用全局替换分号为逗号的方案,这种操作会破坏字段值本身包含逗号的内容(比如地址、备注类字段自带逗号的场景),替换后反而会出现解析错位问题。

内容的提问来源于stack exchange,提问作者FarukA.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 21:27:47