提问人:Shefali Dubey 提问时间:4/12/2010 最后编辑:рüффпShefali Dubey 更新时间:5/2/2017 访问量:12977
使用 XML1.1 解析 Unicode 字符 (0x2)
Parsing unicode character (0x2) using XML1.1
问:
在我的 Java 应用程序中,我需要解析 CDATA 中包含控制字符的 XML 文档。0x2
我尝试了几种方法,但还是成功了。我想避免任何形式的编码。
XML1.1 中有什么办法吗?
答:
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 部分内,您可能会在短期内修复它,方法是将每个字符替换为:
]]><![CDATA[
然而,这是超级时髦的。首先,无论什么都生成了错误的XML,都需要修复。去踢负责创建它的人!
评论
0赞
dimme
3/14/2013
有人请去踢 Pioneer 使用 Rekordbox 2.0.3 生成糟糕的 XML
0赞
mo.
3/22/2013
听起来像是从 ms-word :)中提取的文本
评论
U+xxxx
U+0002