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

FTP获取的CSV文件解析异常:乱码且字段未正确拆分求助

解决CSV解析乱码+字段未拆分问题

核心问题分析

  1. 字段未拆分:你的CSV文件用**分号(;)**作为字段分隔符,但默认的csvParser(如csv-parser库)以逗号(,)作为默认分隔符,导致整行被识别为单个字段。
  2. 乱码问题:Entr�e这类乱码是因为文件实际采用Windows-1252或ISO-8859-1编码存储,强制用UTF-8读取会导致字符解码错误。

修改后的代码实现

1. 调整CSV解析配置与文件编码

async readCsvFile(filePath: string) {
    return new Promise((resolve, reject) => {
      const results = [];
      // 改用Windows-1252编码读取文件,并指定分号作为分隔符
      fs.createReadStream(filePath, { encoding: 'win1252' })
        .pipe(csvParser({ separator: ';' })) // 显式设置分隔符为分号
        .on('data', (data) => {
          results.push(data);
        })
        .on('end', () => {
          resolve(results);
        })
        .on('error', (error) => {
          reject(error);
        });
    });
}

2. 额外验证:FTP下载模式

如果修改后仍有问题,确认FTP下载是否使用二进制模式(避免文本模式下的换行符转换破坏文件结构)。若使用basic-ftp类库,可在下载前确认模式(多数库默认二进制模式,无需额外设置,若有特殊情况可开启调试日志排查):

client.ftp.verbose = true; // 可选,用于查看传输细节
await client.downloadTo('.cache/temp.csv', lastFile.name);

验证步骤

  1. 先修改解析器的分隔符,确认字段是否能正常拆分;
  2. 再调整文件编码(优先试win1252,其次latin1),解决乱码问题;
  3. 若问题依旧,用文本编辑器(如Notepad++)打开下载的temp.csv,查看实际编码和分隔符是否匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 16:17:45