文件头有三个不可见字符(BOM)

博主在处理大规模数据集时遇到std::stoull异常,经排查发现是由文件头BOM引起。通过sed命令去除BOM后问题解决,提醒在使用下载数据前应检查并处理BOM。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  做毕设,下载了个227万数据量的数据集想要测一下算法性能,结果一读文件就出问题,看了一下std::stoull抛出异常,提示invalid parameter。用vim看了一下文件,每行数据以空格隔开,第一个数据就是字符串形式的整数,不应该参数非法。改成strtoull,返回值是0,这表示参数的第一个字符就不是0~9,很奇怪。用vim的命令:set invlist查看不可见字符,也没发现行首有什么字符,在代码里控制跳过第一条数据,发现程序正常运行,那么问题就定位到数据文件头了。在代码中打出第一行的字符串长度,发现比我看到的要多出三个字符的长度,上网搜了一下,发现是文件头BOM导致的。
  解决方法:
  使用sed替换掉BOM:cat IN_FILE | sed ‘s/\xef\xbb\xbf//g’ > OUT_FILE

  警醒:如果不是因为我的程序在文件每行初始就拿来转换为整形,那几乎不可能发现这一问题,后续算法运行可能效果会有所不同。往后如果有需要用到网上下载下来的数据,那么应该先检查一下文件头是否含有BOM,有的话需要去掉后再使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值