2013-05-09 4 views
0

0xf2 0x85 문자가 포함 된 utf-8 문자열이 있습니다. Eclipse는 이것을 공백으로 취급한다. 어떤 응용 프로그램에서는 이것을 '...'으로 취급합니다.jdom 파서를 사용하여 utf8 0xc2 0x85 문자가 포함 된 문자열을 구문 분석 할 수 없습니다.

문자열이 xml이기 때문에 jdom 파서를 사용하고 있으므로 jdom 파서가 실패하고 다음 예외가 발생합니다.

org.jdom.input.JDOMParseException : 오류 1 행 : 프롤로그에서 내용을 사용할 수 없습니다. org.jdom.input.SAXBuilder.build에서 org.jdom.input.SAXBuilder.build (SAXBuilder.java:381) 에서 (SAXBuilder.java:764)

JDOM 파서하지 않는 이유에 대해 어떤 생각 이것을 공백으로 취급 할까? 파서가 XML의 유효성을 검사하도록하려면 어떻게해야합니까? XML 문자열의 다른 모든 요소는 괜찮아 보입니다.

+1

0xc2 0x85는 유니 코드 문자 U + 0085 (다음 줄)의 utf-8입니다. http://www.fileformat.info/info/unicode/char/85/index.htm – user1101293

+0

U + 85는 XML에서 유효하며 공백으로 사용되는 "다음 라인"(NEL) 제어 코드입니다. 그러나 거의 사용되지 않으며 HTML과 같은 다른 형식에서는 유효하지 않습니다. 이전 IBM 형식과의 호환성을 위해 포함되었습니다. 나는 그것을 사용하지 않는 것이 좋습니다. 또한 생략 부호에 대한 CP-1252 문자와 혼동되기 쉽습니다.이 값은 원래 값이 0x85이지만 유니 코드로 U + 2026으로 표시되어야합니다. 일부 소프트웨어 (예 : 브라우저)는 부적절하게 인코딩 된 CP-1252라고 가정하고 줄임표를 잘못 표시합니다 (예 : 브라우저). – thomasrutter

답변

0

공백은 XML에서 매우 특정한 의미를 갖습니다. XML의 루트 요소 밖에서 허용되는 문자는 (#x20 | #x9 | #xD | #xA)+ (공백, 캐리지 리턴, 개행 및 탭)입니다.

XML의 프롤로그 영역에는 limited structures 및 공백이 포함될 수 있습니다.

표시 한 문자는 루트 요소 외부의 유효한 XML에서 사용할 수 없습니다. 죄송합니다.

0

JDOM (또는 실제로 SAX 파서)은 해당 문자를 구문 분석하는 데 아무런 문제가 없습니다. 당신이 얻을 예외는 변함없이 XML 프롤로그 전에 잘못된 문자로 인해 발생 :

<?xml version="1.0" encoding="UTF-8"?> 

그것은 당신이 그 전에 "보이지 않는"문자를 가지고 있지만, 그들은 여전히 ​​있다는 것을 수 있습니다.

+0

이러한 문자는 xml 프롤로그 앞에 없습니다. 그러나 XML 프롤로그 과 루트 요소 사이에 있습니다. 이 캐릭터가 프롤로그 또는 컨텐츠의 일부인지 여부는 확실하지 않습니다. jdom이이 문자들을 프롤로그의 일부로 취급하는 것 같습니다. xml 사양에 따라 올바른 것은 무엇입니까? – user1101293

+0

프롤로그는 루트 요소 이전의 모든 것입니다 ... http://www.w3.org/TR/2004/REC-xml11-20040204/#NT-document 이것은 ** 어려운 JDOM이 아닙니다 **, (지원 라이브러리와 함께) 유효한 XML을 가지고 있는지 확인하십시오. – rolfl

+0

예, "xml 프롤로그 앞 또는 앞에서"해야합니다. –