Thay vì trên cao với saving binary as Base64, tôi đã tự hỏi nếu bạn có thể lưu trữ trực tiếp luồng nhị phân hai byte vào tệp XML, sử dụng CDATA, hoặc nhận xét nó ra, hoặc một cái gì đó?Sử dụng CDATA để lưu trữ luồng nhị phân thô?
Trả lời
Bạn có thể lưu trữ dưới dạng CDATA, nhưng có nguy cơ một số chuỗi byte sẽ đánh giá thành XML hợp lệ đóng phần CDATA. Sau khi xem nhanh http://www.w3.org/TR/2006/REC-xml-20060816/#sec-cdata-sect, có vẻ như bạn có thể có bất kỳ chuỗi ký tự nào ngoại trừ "]]>". Có một cái nhìn tại what is a valid XML char quá.
Ký tự Nul ('\ 0' trong C) không hợp lệ ở bất kỳ đâu trong XML, ngay cả khi thoát (& # 0;).
Tôi cho rằng vì các tệp XML bị vô hiệu. –
@ Jeremy: Không phải. Null không chỉ là một ký tự XML hợp lệ, có khả năng là do các chuỗi được kết thúc bằng null trong một ngôn ngữ lập trình phổ biến ... – Christoph
Lưu ý rằng tiêu chuẩn không rõ 100% về điều này.Các định nghĩa phạm vi ký tự loại trừ 0 byte nhưng một số văn bản khác nói rằng bất kỳ ký tự nào dưới 127 đều hợp lệ. –
XML là định dạng thuần văn bản - không sử dụng định dạng này để lưu trữ dữ liệu nhị phân. Đặt các đốm màu nhị phân trong các tệp riêng biệt và thêm phần tử vào XML của bạn tham chiếu các tệp này. Nếu bạn muốn lưu trữ tất cả các đốm màu nhị phân trong một tệp, hãy thêm thuộc tính offset hoặc một cái gì đó tương tự ...
Vâng, và chính xác Flash phải kết nối và đọc các tệp nhị phân thô như thế nào? (Chỉ dành cho ActionScript 2) –
Đừng cho tôi nói chuyện ByteArray hoặc URLLoader. Đây chỉ là AS2. –
@Jeremy: và bạn đã nói chính xác điều đó ở đâu trong câu hỏi của bạn? – Christoph
Không, bạn không thể sử dụng riêng CDATA để chèn dữ liệu nhị phân vào tệp XML.
Trong XML1.0 (vì XML 1.1 là dễ dãi hơn, nhưng không phải về ký tự điều khiển), các hạn chế sau áp dụng cho CDATA nhân vật:
CData ::= (Char* - (Char* ']]>' Char*))
Char ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]
Điều đó có nghĩa có một số nhân vật bất hợp pháp, trong đó bao gồm:
- bất hợp pháp ký tự điều khiển XML 0x00 đến 0x20 trừ dòng mới, kí tự xuống dòng và các tab
- bất hợp pháp UTF-8 chuỗi như 0xFF hoặc phi kinh điển 0b1100000x 0b10xxxxxx 012.
Bên cạnh đó, trong một nội dung tổ chức tiêu chuẩn mà không CDATA:
- "<" và ">" sử dụng là bất hợp pháp
- "&" sử dụng bị hạn chế (
é
là OK,&zajdalkdza;
là không)
Vì vậy CDATA chỉ là một cách để cho phép "<", ">" và "&", bằng cách hạn chế "]]>" để thay thế. Nó không giải quyết vấn đề XML, Unicode và UTF-8 bất hợp pháp mà là vấn đề chính.
Giải pháp:
- 1. Làm thế nào để giải mã chuỗi mã hóa "nhị phân" thành đệm nhị phân thô?
- 2. lưu trữ dữ liệu nhị phân trong mysql
- 3. lưu trữ dữ liệu nhị phân trên cassandra giống như MYSQL BLOB nhị phân
- 4. phương pháp lưu trữ các tệp nhị phân trong SVN
- 5. Sử dụng tệp để lưu trữ đối số phân tách
- 6. Làm cách nào để viết dữ liệu nhị phân thô bằng Python?
- 7. Làm thế nào để chuyển đổi IPv6 từ nhị phân để lưu trữ trong MySQL
- 8. Tôi có nên sử dụng redis để lưu trữ một số lượng lớn tệp nhị phân không?
- 9. Cây nhị phân Sử dụng PHP + MySQL
- 10. Làm cách nào để lưu trữ tệp nhị phân trong cơ sở dữ liệu sql?
- 11. Cách "thích hợp" để lưu trữ dữ liệu nhị phân bằng C++/STL
- 12. Cách nhanh nhất để truy xuất/lưu trữ hàng triệu đối tượng nhị phân nhỏ
- 13. Làm thế nào để quản lý lưu trữ cục bộ luồng (TLS) khi sử dụng TPL?
- 14. Thực tiễn tốt nhất để sử dụng lưu trữ cục bộ luồng trong .NET là gì?
- 15. Làm cách nào để lấy dữ liệu tệp nhị phân ra khỏi kho lưu trữ Git bằng LibGit2Sharp?
- 16. Sử dụng guid trong sqlite chọn nơi guid được lưu trữ trong sqlite db dưới dạng nhị phân
- 17. VarBinary vs Image SQL Server Kiểu dữ liệu để lưu trữ dữ liệu nhị phân?
- 18. Cách tốt nhất để lưu trữ tệp nhị phân hoặc hình ảnh
- 19. Chuyển đổi hình ảnh Base64 thành nhị phân thô với Node.js
- 20. Sử dụng dlsym trên nhị phân tĩnh
- 21. Có luồng bộ nhớ nhị phân nào trong C++
- 22. Làm cách nào để sao chép dữ liệu nhị phân từ luồng này sang luồng khác?
- 23. Đường ray: Lưu trữ các tệp nhị phân trong cơ sở dữ liệu
- 24. Viết dòng nhị phân để trình duyệt sử dụng PHP
- 25. Thuật toán khác biệt nhị phân git (lưu trữ delta) có được chuẩn hóa không?
- 26. Tại sao g ++ lưu trữ tên lớp trong nhị phân đã biên dịch?
- 27. Viết một tệp nhị phân thô với dữ liệu mảng NumPy
- 28. Lưu trữ dữ liệu nhị phân có cấu trúc lớn với Haskell
- 29. Cây nhị phân tìm kiếm cân bằng ― chỉ lưu trữ dữ liệu trong lá
- 30. lưu trữ cục bộ luồng trong lắp ráp
Điều đó có nghĩa là không bạn không thể, vì 0-8, B, C, E, F FFFE và FFFF là các ký tự không hợp lệ? –
Downvoting vì có nhiều chuỗi byte sẽ không được bảo tồn. Bởi "không bảo quản", tôi có nghĩa là không thể phục hồi dữ liệu nhị phân ban đầu từ dữ liệu được mã hóa CDATA. Xem câu trả lời và nhận xét của Pete. – rwong
nó nguy hiểm hơn nhiều so với bạn đề xuất ở đây. Xem câu trả lời của pete ... – Phil