csv-parse 解析csv文件报错 Invalid Record Length: expect 4, got 7 on line 8

3 篇文章 0 订阅
2 篇文章 0 订阅

在找虫的过程中发现如果把有问题的文件重新保存一次,报错消失。并且对比前后两次的文件大小,有1字节的差异。

这1字节应该就是关键。要看下两个文件这1字节差在哪里,需要查看文件的字节码

 

在终端输入 vi -b 文件名,使用二进制模式

进入后输入

:%!xxd

文件的字节码(对应ASCII码表)就展开了。

 

窗口右边的字符是一一对应的

 

左边的文件是有问题的,右边的可以成功解析。

差别就在于右边文件,所有的换行符都是 0d 0a ,对应 ASCII 码表是“回车”+“换行”。

但是左边文件,倒数第二行的换行符只有0a,即只有“换行”。

结合之前在源码中打印错误行解析为 [ ..., '0.6\n1683142', ... ],换行符被和前后文一起合在一起了,确定是这个差异导致了行解析错误。

 

那么在文件中什么换行才是正常的呢?

这里摘录一下阮一峰大佬《回车和换行》里的解释( http://www.ruanyifeng.com/blog/2006/04/post_213.html

Windows系统里面,每行结尾是"<回车><换行>",即"\r\n";

Mac系统里,每行结尾是"<回车>"。

Unix系统里,每行结尾只有"<换行>",即"\n";

一个直接后果是,Unix/Mac系统下的文件在Windows里打开的话,所有文字会变成一行;而Windows里的文件在Unix/Mac下打开的话,在每行的结尾可能会多出一个^M符号。

 

基本可以下结论,QA小姐姐的这份文件应该是在多个系统环境下经历了修改保存,产生的换行格式差异导致的问题。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值