【问题标题】:How to write and read special characters and symbols from XML using JAXB如何使用 JAXB 从 XML 中写入和读取特殊字符和符号
【发布时间】:2012-04-24 16:32:45
【问题描述】:

有一个使用JAXB 生成XML 文件的JavaRCP 应用程序,它基本上从文本框中获取输入(也包括特殊字符)以保存在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

【问题讨论】:

    标签: java xml jaxb


    【解决方案1】:

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

    【讨论】:

    • 这真令人气愤,正是这种愚蠢让我有时对 XML 充满热情,但确实如此。在我现在正在处理的应用程序中,我们有一个清理步骤,用空格替换各种可疑字符以避免这个问题。
    • 感谢您的回复,但我偶然发现了这个仍然存在的 JAXB 错误:java.net/jira/browse/JAXB-614 错误描述说明了一切。
    【解决方案2】:

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

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

    你可以在这里参考我的问题:Illegal character - CTRL-CHAR

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-26
      • 1970-01-01
      • 2013-04-04
      • 2013-12-09
      • 2014-11-18
      • 1970-01-01
      相关资源
      最近更新 更多