字符串 65279

2020-06-19  本文已影响0人  帮我的鸵鸟盖个章

今天碰到一个大坑,接口传过来一个字符串 str= "1",使用"1".equals(str)判断,本以为返回true,结果一直是false。后来将接口改为传过来的字符串为str = "",再进行判空,结果为非空。这就奇怪了~
其实在debug的时候已经注意到了 str = ""hash65279,并不是0,后面注意到了,就去百度了一下 65279,结果发现是空字符串前面其实有一串编码标识,但是单凭眼睛看是看不到的~

原因可能是写接口的时候这些参数是从编译器复制过来的,某些编辑器会往utf8文件中添加utf8标记(editplus称其为签名),它会在文件开始的地方插入三个不可见的字符(0xEF 0xBB 0xBF,即BOM),它的表示的是Unicode 标记(BOM)。

解决办法就是把这个Unicode标记去掉。

String str = ""; // 此时为前面有Unicode标记
boolean flag1 = StringUtils.isBlank(str); // false
if(str.charAt(0) == 65279){
    str = str.substring(0); // 此时去掉了Unicode标记
}

boolean flag2 = StringUtils.isBlank(str); // true

需要记住的是65279这个数字,看到的时候要保持敏感性~

上一篇下一篇

猜你喜欢

热点阅读