今天在写业务的过程中遇到了一个问题,这个问题百度的很久找不到原因,后来所幸遇到了一个解释,才豁然开朗。
具体的原因就是前端读取Excel内容后,将json数据传递到后端,在验证数据库是否具有相同名称的时候,明明都是这个字符串,为什么会不一样?仔细检查后发现,前端传过来的这个json字段似乎包含了半个空格???
"你好 "
就是类似上面这个字符串,但是那个空格要比上面字符串中的空格小一半左右。使用trim无效,使用replace无效,瞬间崩溃,我靠,java的API不管用了???
马上使用一个字符串验证,明明API没有问题,但是遇到这半个空格的就不管用了?
进过不懈努力,终于知道这个鬼东西叫:不换行空格,也叫不间断空格!
维基百科的解释:https://en.wikipedia.org/wiki/Non-breaking_space
ASCLL码为:u00A0,十进制为160,UTF8码为 0xA0
既然知道是什么了就好办了,这种格式的代码在正常的业务中肯定是会影响我们的业务的,甚至让业务无法正常工作,除非你有特殊需求。
那么最终处理这个问题的方式就是:
str.replace("u00A0", "");
今天算是踩到这个坑了,也花费了一点时间来解决。