2013-12-19 66 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

編輯:我讀你的問題作爲反序列化問題,而不是序列化。抱歉。

答案是你需要使用Uuicode實體轉義字符串來轉義它們。

字符變成ソ。見Japanese Katakana chart

在此還看到XML Escaping


你需要預先處理文件,以正確逃離XML字符。

  1. 在原文件的末尾讀取文件
  2. 如果字符是無效的XML中的每個字符,escape it appropriately
  3. 寫入字符到臨時文件
  4. ,覆蓋原來的臨時文件。

您的文件現在是有效的xml,可以通過標準方式解析。它很可能會更大。給你的文件的供應商一個警告寫一個馬車xml作家;)

+0

無法序列化該字符。請注意,如果我在Internet Explorer中打開該XML,我能夠正確地看到。這意味着包含這樣的字符的XML是一個有效的XML文件,但爲什麼它在序列化時拋出無效的XML字符。 – Abhishek

+0

上面的評論看起來不像一個問題,重寫它。我的問題是,我們必須以某種方式將字符序列化,因爲我已經將這些字符寫入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的unicode實體。是片假名嗎?我無法或無法確定。 – Gusdor