En lugar de la sobrecarga con saving binary as Base64, me preguntaba si podría almacenar directamente secuencias binarias de doble byte en archivos XML, utilizando CDATA, o comentándolo, o algo así?¿Utiliza CDATA para almacenar flujos binarios en bruto?
Respuesta
Puede almacenarlo como CDATA, pero existe el riesgo de que algunas secuencias de bytes se evalúen como XML válido que cierra la sección CDATA. Después de un rápido vistazo al http://www.w3.org/TR/2006/REC-xml-20060816/#sec-cdata-sect, parece que puede tener cualquier secuencia de caracteres excepto "]]>". Eche un vistazo al what is a valid XML char también.
El carácter Nul ('\ 0' en C) no es válido en ningún lugar en XML, incluso como un escape (& # 0;).
Supongo porque los archivos XML tienen terminación nula. –
@Jeremy: No lo son. Nulo simplemente no es un carácter XML válido, probablemente debido a cadenas terminadas en nulo en un lenguaje de programación popular ... – Christoph
Tenga en cuenta que el estándar no es 100% claro al respecto.Las definiciones de rango de caracteres excluyen el byte 0, pero algunos otros textos dicen que cualquier carácter por debajo de 127 es válido. –
XML es un formato de texto plano; no lo use para almacenar datos binarios. Coloque los blobs binarios en archivos separados y agregue un elemento a su XML que haga referencia a estos archivos. Si desea almacenar todos los blobs binarios en un solo archivo, agregue un atributo de desplazamiento o algo así ...
Sí, y ¿cómo se supone que Flash debe conectarse y leer archivos binarios descargados? (Solo ActionScript 2) –
No me proporcione la conversación ByteArray o URLLoader. Esto es solo AS2. –
@Jeremy: ¿y dónde exactamente lo expresaste en tu pregunta? – Christoph
No, no puede usar CDATA solo para inyectar datos binarios en un archivo XML.
En XML1.0 (porque XML 1.1 es más permisiva, pero no se trata de caracteres de control), las siguientes restricciones se aplican a caracteres CDATA:
CData ::= (Char* - (Char* ']]>' Char*))
Char ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]
Eso significa que hay varios caracteres ilegales, entre ellas se encuentran:
- ilegales caracteres de control XML 0x00 a 0x20 excepto nuevas líneas, retornos de carro y las pestañas
- ilegales UTF-8 secuencias como 0xFF o la no canónica 0b1100000x 0b10xxxxxx
Además de eso, en un contenido entidad estándar sin CDATA:
- y el uso "<" ">" son ilegales
- "&" El uso está restringido (
é
está bien,&zajdalkdza;
es no)
Así CDATA es sólo una manera de permitir que "<", ">" y "&", mediante la restricción "]]>" en su lugar. No resuelve el problema de los caracteres XML, Unicode y UTF-8 ilegales.
Soluciones:
- 1. métodos para almacenar archivos binarios en SVN
- 2. Almacenar objetos binarios en Neo4j
- 3. ¿Es aceptable/bueno almacenar binarios en SVN?
- 4. Forma "adecuada" para almacenar datos binarios con C++/STL
- 5. ¿Utiliza una clase para almacenar datos estáticos en Java?
- 6. Casos de uso para flujos en Scala
- 7. Uso de CDATA dentro de otro CDATA
- 8. imagen en bruto en RESTeasy
- 9. Decode CDATA en C#
- 10. std :: string o std :: vector <char> para contener datos en bruto
- 11. casting cadenas en bruto python
- 12. descarte de flujos en Java
- 13. Escribir simultáneamente en dos flujos
- 14. Flujos de memoria en Ruby?
- 15. iPhone escribiendo datos binarios
- 16. Mejor manera de almacenar archivos binarios o de imagen
- 17. ¡Flujos de WCF en trozos de 4K!
- 18. Acerca de! [CDATA [, ¿qué es?
- 19. Cómo analizar XML para <![CDATA[]]>
- 20. Secuencia con flujos en Scala
- 21. C++ String de STL para datos binarios
- 22. ¿Qué es CDATA en HTML?
- 23. Boost binarios para MinGW
- 24. Nokogiri para obtener html en bruto de un nodo
- 25. E4X Agregar contenido CDATA
- 26. ¿Es realmente necesario CDATA?
- 27. <![CDATA []]>
- 28. XML CDATA Encoding
- 29. Analizando bloques XML CDATA
- 30. Usando NSXMLParser con CDATA
¿No significa que no, no puede, ya que 0-8, B, C, E, F FFFE y FFFF son caracteres no válidos? –
Downvoting porque hay muchas secuencias de bytes que no se conservarán. Al decir "no preservar", quiero decir que no es posible recuperar los datos binarios originales de los datos codificados por CDATA. Vea las respuestas y comentarios de Pete. – rwong
es mucho más arriesgado, de lo que sugiere aquí. Vea la respuesta de Pete ... – Phil