如何使用JAXB从XML编写和读取特殊字符和符号

时间:2012-04-12 10:22:53

标签: java xml jaxb

使用JavaRCP应用程序使用JAXB生成XML文件,它基本上从文本框中输入(特殊字符)以保存在xml中,并通过从xml解组显示相同的内容。 / p>

用户正在复制控制台输出(可能包含特殊字符)并粘贴在文本框中并将其保存为xml。

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

jaxb version is 2.1.10 in JDK 1.6_21.

解组时,收到unmarshall异常:

[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

2 个答案:

答案 0 :(得分: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-safe",或使用二进制编码,例如base64。

因此,绝对没有办法在XML中表示这些字符。如果这些字符串的确切表示对您的应用程序并不重要,您可以删除这些字符或用一些占位符替换它们,否则您必须使用一些安全的编码方案(如Base64)对这些字符串进行编码。

答案 1 :(得分:1)

是的,你不想删除CONTROL CHAR,你可以转义char。
您可以使用java.net.URLEncoder在服务器端对数据进行编码,然后使用java.net.URLDecoder在客户端对其进行解码。
它就像魅力一样,我用它来达到同样的目的并且工作正常。

如果用0x1b代替?在代码中手动,有一天你会发现一些其他的CONTROL CHAR。所以我认为更好的方法是使用编码器/解码器,如果你想保留数据,否则远程它。

您可以在此处提及我的问题:Illegal character - CTRL-CHAR