而不是saving binary as Base64的开销,我想知道你是否可以直接将双字节二进制流存储到XML文件中,使用CDATA,或者将其注释掉,或者什么?
答案 0 :(得分:11)
Nul字符(C中的'\ 0')在XML中的任何地方都无效,即使是作为转义符(�)。
答案 1 :(得分:9)
不,你不能单独使用CDATA在XML文件中注入二进制数据。
在XML1.0中(因为XML 1.1更宽松,但不是控制字符),以下限制适用于CDATA字符:
CData ::= (Char* - (Char* ']]>' Char*))
Char ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]
这意味着有几个字符是非法的,其中包括:
除此之外,在没有CDATA的标准实体内容中:
é
没问题,&zajdalkdza;
不是)所以CDATA只是一种允许“<”,“>”的方式和“&”,通过限制“]]>”代替。它没有解决非法的XML,Unicode和UTF-8字符问题,这是主要问题。
解决方案:
答案 2 :(得分:4)
XML是纯文本格式 - 不要用它来存储二进制数据。将二进制blob放在单独的文件中,并在XML中添加一个引用这些文件的元素。如果要将所有二进制blob存储在单个文件中,请添加偏移属性或类似的内容......
答案 3 :(得分:-1)
您可以将其存储为CDATA,但存在一些字节序列将评估为关闭CDATA部分的有效XML的风险。快速查看http://www.w3.org/TR/2006/REC-xml-20060816/#sec-cdata-sect后,您似乎可以拥有除“]]>”之外的任何字符序列。也请查看what is a valid XML char。