FTP获取的CSV文件解析异常:乱码且字段未正确拆分求助
解决CSV解析乱码+字段未拆分问题
核心问题分析
- 字段未拆分:你的CSV文件用**分号(;)**作为字段分隔符,但默认的
csvParser(如csv-parser库)以逗号(,)作为默认分隔符,导致整行被识别为单个字段。 - 乱码问题:
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);
验证步骤
- 先修改解析器的分隔符,确认字段是否能正常拆分;
- 再调整文件编码(优先试
win1252,其次latin1),解决乱码问题; - 若问题依旧,用文本编辑器(如Notepad++)打开下载的
temp.csv,查看实际编码和分隔符是否匹配。
内容的提问来源于stack exchange,提问作者dolor3sh4ze
相关产品推荐
相关产品推荐

