XML에서 사용할수 없는 문자들 : unicode control characters

개발 2011. 9. 7. 11:41

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.


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에는 바이너리도 넣을수 있는줄 알았는데 아니었어요.

두번째 해결방법이 더 좋은 방법인데, 주고받는쪽 둘다 고쳐야 됩니다.



: