记住EF BB BF
文章目录
遇到一个问题,记录一下。
收到反馈说,用户上传的文件无法解析。查看日志后发现,解析第一行时就报错了,但是用普通文本编辑器查看发现文件看起来并无异常,是一个只有一列的csv文件。
通过xxd
查看16进制格式:
|
|
可以看到,开头三个字节为:ef bb bf
,感觉不正常搜索之:
- JAVA- Integer.parseInt( str ) gives NumberFormatException, input is a str representing an integer)
- 字节顺序标记
从这个 stackOverflow的 回答知道,BOM 是用来标识字节序(Endianness)的,而且utf-8 是没必要使用BOM的:
Normally, the BOM is used to signal the endianness of an encoding, but since endianness is irrelevant to UTF-8, the BOM is unnecessary. UTF-8 has the same byte order regardless of platform endianness, so a byte order mark isn’t needed.
至于为啥utf-8没必要使用BOM,据说是由于它的编码特性,是字节序无关的,具体可能需要新开一篇帖子来学习下utf-8的原理了。
知道了问题所在,那解法就有了,在解析前先把开头三个BOM字节trim掉:
|
|
ps, 那个惹祸的文件是由Mac OS X 系统下的 Excel 生成的。
文章作者 linuxfish
上次更新 2021-08-09