今天碰到一个隐藏的问题,csv文件是utf-8bom的格式,导致第一列数据会多一个字符\uFEFF,匹配的时候不相等。

csv文件以utf-8 bom 编码时,文件开头会多一个字符。

1
2
3
4
5
6
7
王2宝,Mike,王三宝
100,108,155
105,108,160
110,108,165
115,105,170
120,101,175
125,100,180

有个业务操作是需要根据第一行的人名去map中获取value,map的key是王2宝,csv中读取到的乍一看去也2宝,但就是获取不到值,其他的Mike王三宝都已经正确保存,而且能查到。数据库中查询like '王%宝' 居然只查询到王三宝,当时就惊呆了,怎么会只插入一部分,检查代码也没有查出来问题。然后用like '%宝'居然查出来了,这是怎么回事。最后想到会不会是多了什么字符导致匹配不上。打印了一下王2宝的长度,果然有问题,多了一个。调试的时候看了一下王2宝的值,好家伙,前面有个\uFEFF
手动去掉多的这个字符就可以了。

1
name = name.contains(Character.toString('\uFEFF')) ? new StringBuffer(name).deleteCharAt(name.indexOf('\uFEFF')).toString()

有时候看起来一样的字符实际上不一样,出现这样的问题时,可以看一下每个字符的数值是不是一致