XML에서 사용할수 없는 문자들 : unicode control characters
XML로 데이터를 보내고 있는데, XML에 포함될수 없는 문자들이 있네요.
이클립스에서는 아래와같이 에러문구를 보여줍니다.
An invalid XML character (Unicode: 0xb) was found in the CDATA section
XML 스펙을 찾아보면 1.0에서는 CDATA 섹션에도 들어갈수 없는 문자들이 있고, 1.1에서는 가능하다고 하네요.
보통 아래처럼 XML 1.0 으로 쓰고 있었는데... 이런 함정이 숨어 있을줄이야..
<?xml version="1.0" encoding="UTF-8"?>
두가지 해결방법이 있습니다.
첫번째는, 아래같은 로직을 이용해서 문제를 회피할수 있습니다.
public String filterBadXMLCharactors(String textToFilter) {
StringBuffer filteredString = new StringBuffer();
char current;
if (textToFilter == null || "".equals(textToFilter)) {
return "";
}
for (int i = 0; i < textToFilter.length(); i++) {
current = textToFilter.charAt(i);
if ((current == 0x9) || //
(current == 0xA) || //
(current == 0xD) || //
((current >= 0x20) && (current <= 0xD7FF)) || //
((current >= 0xE000) && (current <= 0xFFFD)) || //
((current >= 0x10000) && (current <= 0x10FFFF))) {
filteredString.append(current);
}
}
return filteredString.toString();
}
두번째는,
CDATA 섹션에 데이터를 인코딩해서 넣는 것입니다. CDATA에는 바이너리도 넣을수 있는줄 알았는데 아니었어요.
두번째 해결방법이 더 좋은 방법인데, 주고받는쪽 둘다 고쳐야 됩니다.