Ich habe viele Pakete mit Binärdaten zwischen 16 und 4096 Bytes, die in einer Datenbank gespeichert werden müssen und die als Einheit leicht vergleichbar sein sollten (z. B. zwei Pakete mit Daten, die nur dann zusammenpassen, wenn die Längen und alle Bytes übereinstimmen). Strings sind dafür gut geeignet, aber die blinde Konvertierung von Binärdaten in einen String kann aufgrund von Problemen bei der Zeichenkodierung/Uminterpretation zu Problemen führen.
Base64 war eine gängige Methode zum Speichern von Zeichenketten in einer Zeit, in der 7-Bit-ASCII die Norm war; die 33%ige Leerraumeinbuße war zwar etwas ärgerlich, aber nicht schrecklich. Wenn man UTF-16 verwendet, beträgt der Platzverlust leider 166 % (8 Byte für 3 Byte), was ziemlich eklig ist.
Gibt es eine gängige Speichermethode zum Speichern von Binärdaten in einer gültigen Unicode-Zeichenkette, die eine bessere Effizienz in UTF-16 ermöglicht (und hoffentlich nicht zu schrecklich in UTF-8 ist)? Eine Base-32768-Kodierung würde 240 Bits in sechzehn Zeichen speichern, was 32 Bytes von UTF-16 oder 48 Bytes von UTF-8 erfordern würde. Im Vergleich dazu würde die base64-Kodierung 40 Zeichen verwenden, was 80 Byte UTF-16 oder 40 Byte UTF-8 erfordern würde. Ein Ansatz, der so konzipiert wurde, dass er in UTF-8 oder UTF-16 den gleichen Platz einnimmt, könnte 48 Bits in drei Zeichen speichern, die in UTF-8 oder UTF-16 acht Bytes beanspruchen würden, so dass 240 Bits in 40 Bytes von UTF-8 oder UTF-16 gespeichert würden.
Gibt es für so etwas irgendwelche Normen?