使用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
答案 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