而不是开销saving binary as Base64,我想知道是否可以直接存储双字节二进制流到XML文件,使用CDATA或注释掉,或什么?使用CDATA存储原始二进制流?
6
A
回答
-1
您可以将其存储为CDATA,但有可能某些字节序列将评估为关闭CDATA部分的有效XML。快速浏览一下http://www.w3.org/TR/2006/REC-xml-20060816/#sec-cdata-sect,似乎你可以有任何字符序列,除了“]]>”。看看what is a valid XML char。
11
Nul字符(C中的'\ 0')在XML中任何地方都无效,即使作为转义(�)。
4
XML是纯文本格式 - 不要用它来存储二进制数据。将二进制blob放在单独的文件中,并将一个元素添加到引用这些文件的XML中。如果要将所有二进制blob存储在单个文件中,请添加偏移属性或类似的内容...
7
不,您不能单独使用CDATA将二进制数据注入XML文件。
在XML1.0(因为XML 1.1是更宽容,但不是控制字符),以下限制适用于CDATA字符:
CData ::= (Char* - (Char* ']]>' Char*))
Char ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]
这意味着有几个非法字符,其中包括:
- 非法XML的控制字符为0x00为0x20除了新线,回车和制表符
- 非法UTF-8序列像0xFF的或非规范0b1100000x 0b10xxxxxx
除此之外,在没有CDATA标准的实体内容:
- “<” 和 “>” 的使用是非法
- “&” 的使用受到限制(
é
是确定的,&zajdalkdza;
是不)
所以CDATA只是一种方式,让 “<”, “>” 和 “&”,通过限制 “]]>” 来代替。它不能解决非法的XML,Unicode和UTF-8字符问题,这是主要问题。
解决方案:
相关问题
- 1. 用JavaScript流二进制流
- 2. QR码 - 原始二进制数据
- 3. 存储在应用程序二进制
- 4. 在erlang中使用tcp发送原始二进制文件
- 5. C二进制流
- 6. C#在资源中存储二进制流(或字节数组)
- 7. 保存流中的二进制数据
- 8. 设置开始地址以执行原始二进制文件
- 9. Nodejs使用流保存二进制文件
- 10. 在mysql中存储二进制数据
- 11. Mac OS X二进制存储库
- 12. 在Neo4j中存储二进制对象
- 13. Mysql二进制存储问题
- 14. 在MySQL中存储二进制数组
- 15. SQL Server的二进制文件存储
- 16. 用cURL发送原始的二进制和数据
- 17. 如何使用php-curl在本地存储二进制文件?
- 18. 使用Ruby on Rails在Postgres中存储二进制对象
- 19. PHP,SQL服务器:使用二进制数据存储过程
- 20. 存储/查询二进制序列并使用掩码搜索
- 21. 如何使用cassandra cql存储二进制数据
- 22. 文件到二进制流
- 23. Rails二进制流支持
- 24. 输出流response.redirect二进制
- 25. 在cassandra上存储二进制数据就像MYSQL BLOB二进制
- 26. 如何使用C和GMP_Bignum将二进制原始数据转换为整数
- 27. 使用Python从Onionscan读取原始数据(二进制?)Tiedot(NOSQL/JSON)数据
- 28. 如何在MongoDB中有效存储和查询原始JSON流?
- 29. 复制二维数组使用.clone()仍引用原始数据
- 30. 内存分配原始流vs原始类型表
我想是因为XML文件是空终止的。 – 2009-02-02 11:12:04
@杰瑞米:他们不是。 Null不是一个有效的XML字符,可能是因为流行编程语言中以空字符结尾的字符串... – Christoph 2009-02-02 11:34:35
请注意,该标准并非100%清楚。字符范围定义不包括0字节,但其他一些文本则说任何低于127的字符都是有效的。 – 2009-02-02 12:29:31