2

有一个用于生成 XML 文件的JavaRCP应用程序JAXB,它基本上从文本框中获取输入(也包括特殊字符)以保存在 xml 中并通过从 xml 中解组来显示相同​​的内容。

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

xml 版本="1.0" 编码="UTF-8"

jaxb 版本是 JDK 1.6_21 中的 2.1.10。

解组时,收到解组异常:

[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

2 回答 2

4

描述此问题的JAXB 错误报告已关闭,解释如下:

抱歉,这只是 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)对这些字符串进行编码。

于 2012-04-12T10:43:47.687 回答
1

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

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

你可以在这里参考我的问题:非法字符 - CTRL-CHAR

于 2012-04-12T10:59:28.143 回答