2012-04-12 372 views
2

有一個使用JAXB生成XML文件的JavaRCP應用程序,它基本上從文本框中輸入(特殊字符)以保存在xml中並顯示相同的從xml解組。如何使用JAXB編寫和讀取XML中的特殊字符和符號

用戶正在複製控制檯輸出(可能包含特殊字符)並粘貼到文本框中並將其保存到xml中。

 
xml version="1.0" encoding="UTF-8" 

jaxb version is 2.1.10 in JDK 1.6_21. 

在解組,接收和解組例外:

[org.xml.sax.SAXParseException: An invalid XML character (Unicode: 0x1b) was found in the element content of the document]

有解編XML時發現無效XML字符。我搜索了這個論壇尋求幫助,並找到了一些鏈接,但他們都沒有解決方法或解決方法。任何人都可以指導我。

我試過用其他編碼類型,但沒有成功。在保存/編組前,我是否需要用相應的字符代碼替換該字符?

以下是這更接近我的問題鏈接: Saving an escape character 0x1b in an XML file Invalid Characters in XML

回答

4

一個JAXB bug report describing this problem與下面的說明關閉:

對不起,這簡直就是一個XML格式的限制。

在XML中,不允許使用控制字符。看到允許的字符列表 在http://www.w3.org/TR/REC-xml/#NT-Char

這不是一個逃避http://www.w3.org/TR/REC-xml/#sec-references的問題。 像\ u001C這樣的字符根本就不是XML中的有效字符。 無法傳輸包含這些字符的字符串。

您的選擇是提出自己的字符串編碼方案,使 字符串「XML安全」,或使用二進制編碼,如base64。

因此,絕對沒有辦法在XML中表示這些字符。如果這些字符串的確切表示對於您的應用程序並不重要,那麼您可以刪除這些字符或用一些佔位符替換它們,否則必須使用一些安全編碼方案(如Base64)對這些字符串進行編碼。

+0

這是真氣,並具有完全相同的排序daftness的,這讓我討厭XML與激情的時候,但是它確實是真的。在我正在處理的應用程序中,我們有一個清理步驟,用空格替換各種可疑字符以避免此問題。 – 2012-04-12 11:38:54

+0

感謝您的回覆,但我偶然發現了這個仍然開放的JAXB錯誤:http://java.net/jira/browse/JAXB-614錯誤說明解釋了所有錯誤。 – user1328572 2012-04-16 12:06:19

1

是的,你不想刪除CONTROL CHAR,你可以逃脫char。
您可以使用java.net.URLEncoder在服務器端對數據進行編碼,然後使用java.net.URLDecoder在客戶端進行解碼。
它像魅力一樣工作,我用它來達到同樣的目的,並且工作得很好。

如果您在代碼中手動替換0x1b和,那麼您可能會在其他日期找到其他CONTROL CHAR。所以我認爲更好的方法是使用編碼器/解碼器,如果你想保存數據,否則遠程它。

你可以在這裏是指我的問題:Illegal character - CTRL-CHAR