奇怪的空格

今天从一个运营给的Excel文件往数据库导入更新数据,导入完成后,发现总有一些数据没有被更新,但是文件里是有相应的数据的,一搜发现是用来做更新key的字段后有空格,例如:gh_55913f0ae122 ,然后就加了trim()函数,但是发现依然无法去掉中文空格,debug一看,这个空格是ascii码为160的空格,trim()函数是无效的,所以采用了以下的解决方法:

1
2
3
4
5
6
7
8
9
public class Main {
public static void main(String[] args) {
String test = "gh_55913f0ae122 ";
System.out.println(test.length());
String test2 = test.replaceAll("\\u00A0","");
System.out.println(test2.length());
System.out.println(test2);
}
}

输出:

1
2
3
origin, length = 16
trimResult, length = 16
replaceResult, length = 15

那这个ascii为160的空格是什么呢,其实就是html里的不间断空格 ,如果在文本中写10个普通的ascii为32的空格,在显示该页面之前,浏览器会删除它们中的9个。如需在页面中增加空格的数量,需要使用   字符实体。
使用StringEscapeUtils.unescapeHtml4()转义 后和普通空格比较,可以发现返回的是false,因为两者ascii不一样,不是同样的空格。

1
2
3
System.out.println(StringEscapeUtils.unescapeHtml4(" ").equals(" "));
System.out.println((int)StringEscapeUtils.unescapeHtml4(" ").charAt(0));
System.out.println((int)' ');

输出:

1
2
3
false
160
32

所以ascii为160的空格的unicode是00A0,使用replaceAll("\\u00A0","")的方式可以解决。

0%