Kodierung von Binärdaten in XML: Gibt es bessere Alternativen als base64?

Ich möchte binäre Daten in einer XML-Datei codieren und decodieren (mit Python, aber was auch immer). Ich muss mich der Tatsache stellen, dass ein XML-Tag-Inhalt unzulässige Zeichen enthält. Die einzig erlaubten sind in beschriebenXML-Spezifikationen:

Char ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]

Was bedeutet, dass die nicht erlaubt sind:

29 Unicode-Steuerzeichen sind unzulässig (0x00 - 0x20), dh (000xxxxx) außer 0x09, 0x0A, 0x0DJede Unicode-Zeichendarstellung über 2 Bytes (UTF-16 +) ist unzulässig (U + D800 - U + DFFF), dh (11011xxx)Die speziellen Unicode-Sonderzeichen sind unzulässig (0xFFFE - 0xFFFF), dh (11111111 1111111x)<,> & nachdieser Beitrag für Entitäten Inhalt

1 Byte kann 256 Möglichkeiten kodieren. Mit diesen Einschränkungen ist das erste Byte auf 256-29-8-1-3 = begrenzt215 Möglichkeiten.

Von den 215 Möglichkeiten dieses ersten Bytesbase64 nutzt nur 64 möglichkeiten. Base64 generiert 33% Overhead (6 Bits werden 1 Byte, sobald sie mit Base64 codiert wurden).

Meine Frage ist also einfach:Gibt es einen effizienteren Algorithmus als base64, um Binärdaten in XML zu kodieren? Wenn nicht, wo sollen wir anfangen, es zu erstellen? (Bibliotheken usw.)

NB: Sie würden diesen Beitrag nicht mit "Sie sollten XML nicht zum Codieren von Binärdaten verwenden, weil ..." beantworten. Tu es einfach nicht. Sie könnten bestenfalls argumentieren, warum Sie die 215 Möglichkeiten für die Unterstützung von schlechten XML-Parsern nicht nutzen sollten.

NB2: Ich spreche nicht über das zweite Byte, aber es gibt sicherlich einige Überlegungen, die hinsichtlich der Anzahl der Möglichkeiten und der Tatsache, dass es mit 10xxxxxx beginnen sollte, um den UTF8-Standard zu erfüllen, wenn wir die zusätzlichen Unicode-Ebenen verwenden, auftreten können (was, wenn nicht? ).

Antworten auf die Frage(3)

Ihre Antwort auf die Frage