2013-12-19 1 views
0

ンᅧᅭ%ンᅨ&과 같은 문자열이 포함 된 문서를 직렬화해야하는 경우가 있습니다. 그것을 직렬화하는 동안 다음과 같은 예외가 발생합니다 :직렬화 중 잘못된 xml 문자 처리

 
java.io.IOException: The character '' is an invalid XML character 

해결 방법과 함께이 문자열을 직렬화 할 수있는 방법이 있습니까?

StringWriter stringOut = new StringWriter(); 
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance(); 
DocumentBuilder docBuilder = docFactory.newDocumentBuilder(); 
Document doc = docBuilder.newDocument(); 
Element rootElement = doc.createElement("company"); 
doc.appendChild(rootElement); 
String xml = "ンᅧᅭ%ンᅨ&"; 
//String xml = "ンᅧᅭ%ンᅨ&"; 
Element junk = doc.createElement("replyToQ"); 
junk.appendChild(doc.createCDATASection(xml)); 
//junk.appendChild(doc.createTextNode(stripNonValidXMLCharacters(xml))); 
rootElement.appendChild(junk); 

//org.w3c.dom.Document doc = this.toDOM(); 

//Serialize DOM 
OutputFormat format = new OutputFormat(doc,"UTF-8",true); 
format.setIndenting(false); 
format.setLineSeparator(""); 
format.setPreserveSpace(true); 
format.setOmitXMLDeclaration(false); 

XMLSerializer serial = new XMLSerializer(stringOut, format); 
// As a DOM Serializer 
serial.asDOMSerializer(); 

serial.serialize(doc.getDocumentElement()); 
+0

어떤 언어입니까? –

+0

UTF-8 대신 다른 인코딩을 시도 할 수 있습니다. 시도 할 수있는 목록이 있습니다 : http://en.wikipedia.org/wiki/ISO/IEC_2022#ISO.2FIEC_2022_character_sets. – splrs

답변

1

편집 : 나는 deserialisation 질문하지 직렬화으로 질문을 읽어 보시기 바랍니다. 죄송합니다.

대답은 Uuicode 엔터티 이스케이프 문자열을 사용하여 이스케이프 처리해야한다는 것입니다.

문자 ソ이됩니다.

Japanese Katakana chart은 또한 당신은 제대로 된 XML 문자를 이스케이프 할 파일을 사전 처리 할 필요가 XML Escaping


여기를 참조하십시오.

  1. 원본 파일의 끝에서 임시 파일
  2. 에 파일
  3. 문자가 잘못된 XML 인 경우 각 문자, escape it appropriately
  4. 쓰기 문자를 읽어 임시 파일 원래 덮어 씁니다.

파일은 이제 유효한 xml이며 표준 방법으로 파싱 할 수 있습니다. 그것은 더 큰 가능성이 높습니다. 파일 공급 업체에게 버그가있는 xml 작가를 작성하는 것에 대해 알려주십시오)

+0

해당 문자를 직렬화 할 수있는 방법이 없습니다. Internet Explorer에서 xml을 열면 올바르게 볼 수 있습니다. 즉, 그러한 문자를 포함하는 XML은 유효한 XML 파일이지만 직렬화하는 동안 잘못된 XML 문자를 던지는 이유입니다. – Abhishek

+0

위의 설명은 질문으로 보지 않고 다시 작성합니다. 내 질문에 거기에 문자를 serialize 할 수있는 방법이 있어야합니다. XML 파일에이 문자를 작성하고 Internet Explorer에서 xml 파일을 열었 기 때문에 정상적으로 작동했기 때문입니다. 그것은 XML을 표시합니다. 이것이 잘못된 xml 문자 인 경우 Internet Explorer에서 표시 할 수없는 이유입니다. – Abhishek

+0

@Abhishek "그 캐릭터를 직렬화 할 방법이 없습니다"- 확실합니까? http://en.wikipedia.org/wiki/XML#Escaping 또한 카타카나 문자에 대한 유니 코드 엔티티가 있습니다. http://symbolcodes.tlt.psu.edu/bylanguage/japanesechartkatakana.html. 카타 카나인가요? 나는 방법이 없거나 확실하지 않습니다. – Gusdor