웹 게시판에서 글을 작성하고 스페이스가 들어간 것을 바로 ;nbsp로 DB(mysq)로 저장하면,


유니코드 00A0으로 저장된다. 이를 '줄 바꿈 없는 공백' (no break whitespace)이라 한다. 


space가 아니기 때문에 의도된 프로그래밍에 실패할 수 있다. 



아래 예제는 단순히 공백으로 보이지만, 사실 유니코드 00A0 가 들어있는 String이다.  

String s = " "

String x = s.replaceAll("\\s", "");

System.out.println(x.length());


결과는 1이다. 00A0는 정규표현식의 space가 아니기 때문에 replace되지 않는다.


String s = " ";

String x = s.trim();

System.out.println(x.length());


재미있는 것은 trim()을 써도 되지 않는다. trim()의 구현이 단순히 whitespace만 정리해주는 코드로 되어 있다.


따라서, 00A0를 replace하기 위해서는 아래와 같이 반드시 unicode를 써야 한다. 



String s = " ";

String x = s.replaceAll("\\u00A0", "");

System.out.println(x.length());



결과는 0이다. 



출처 : 


http://ko.wikipedia.org/wiki/%EC%A4%84_%EB%B0%94%EA%BF%88_%EC%97%86%EB%8A%94_%EA%B3%B5%EB%B0%B1


http://www.fileformat.info/info/unicode/char/00a0/index.htm

Posted by 김용환 '김용환'

댓글을 달아 주세요