使用 XML1.1 解析 Unicode 字符 (0x2)

Parsing unicode character (0x2) using XML1.1

提问人:Shefali Dubey 提问时间:4/12/2010 最后编辑:рüффпShefali Dubey 更新时间:5/2/2017 访问量:12977

问:

在我的 Java 应用程序中,我需要解析 CDATA 中包含控制字符的 XML 文档。0x2

我尝试了几种方法,但还是成功了。我想避免任何形式的编码。

XML1.1 中有什么办法吗?

xml 解析

评论

0赞 Joachim Sauer 4/12/2010
顺便说一句,引用 Unicode 代码点(而不是特定编码)的正确表示法是(例如,在您的情况下):en.wikipedia.org/wiki/UnicodeU+xxxxU+0002

答:

2赞 Tomalak 4/12/2010 #1

XML 不能包含 ASCII 控制字符(TAB、CR 和 LF 除外),甚至在 CDATA 节中也不能包含。XML 规范不允许它们。

将二进制数据编码为 Base64 字符串并写入 XML。在这种情况下,不需要 CDATA。

评论

0赞 Matthew Wilson 4/12/2010
第一部分仅适用于 XML 1.0。XML 1.1 确实允许这些字符作为字符引用 - 尽管据我所知,XML 1.1 并没有被广泛采用。正如 Tomalak 所建议的那样,编码为二进制数据并使用 XML 1.0 可能是最简单、最兼容的解决方案。
0赞 Shefali Dubey 4/12/2010
但是从我读到的有关 xml1.1 的内容来看,似乎 xml1.0 中不支持的一些 unicode 字符现在在 xml1.1 中受支持?
0赞 bobince 4/12/2010
是的,它们可能是 XML 1.1 中文档内容的一部分,但它们仍然仅在序列化 XML 中作为字符引用有效。(即便如此,正如 Tomalak 所说,在 XML 中粘贴任意的二进制垃圾通常是一个非常糟糕的主意。
0赞 рüффп 5/29/2017
在 XML 中提及 Base64 编码的好答案
11赞 bobince 4/12/2010 #2

我需要解析 CDATA 中包含控制字符0x2的 xml

那么,那不是 XML。任何位置的原始控件字符 U+0002 表示它的格式不正确,因此不是 XML 文档。

仅在 XML 1.1 中,可以包含编码为字符引用的控制字符。因此,您可能尝试通过在解析之前执行字符串替换 for with 来修复它。但是,您不能将字符引用放在 CDATA 部分中,因此这也不会成功。\x02

编辑:如果您绝对确定每个杂散的 U+0002 字符都在 CDATA 部分内,您可能会在短期内修复它,方法是将每个字符替换为:

]]>&#2;<![CDATA[

然而,这是超级时髦的。首先,无论什么都生成了错误的XML,都需要修复。去踢负责创建它的人!

评论

0赞 dimme 3/14/2013
有人请去踢 Pioneer 使用 Rekordbox 2.0.3 生成糟糕的 XML
0赞 mo. 3/22/2013
听起来像是从 ms-word :)中提取的文本