字符串 65279
2020-06-19 本文已影响0人
帮我的鸵鸟盖个章
今天碰到一个大坑,接口传过来一个字符串 str= "1"
,使用"1".equals(str)
判断,本以为返回true
,结果一直是false。后来将接口改为传过来的字符串为str = ""
,再进行判空,结果为非空。这就奇怪了~
其实在debug
的时候已经注意到了 str = ""
的hash
为 65279
,并不是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
这个数字,看到的时候要保持敏感性~