У меня есть много пакетов двоичных данных размером от 16 до 4096 байт, которые необходимо хранить в базе данных и которые должны быть легко сравнимы как единое целое (например, два пакета данных, только если длина совпадает и все байты совпадают). Строки хороши для этого, но слепое преобразование двоичных данных в строку может вызвать проблемы из-за проблем с кодировкой/повторной интерпретацией символов.
Base64 был распространенным методом хранения строк в эпоху, когда 7-битный ASCII был нормой; его штраф в размере 33% места был немного раздражающим, но не ужасным. К сожалению, если кто-то использует UTF-16, штраф за пространство составляет 166% (8 байтов для хранения 3), что кажется довольно неприглядным.
Существует ли какой-либо общий метод хранения двоичных данных в допустимой строке Unicode, который позволит повысить эффективность в UTF-16 (и, надеюсь, не будет слишком ужасным в UTF-8)? Кодировка base-32768 будет хранить 240 битов в шестнадцати символах, что займет 32 байта UTF-16 или 48 байтов UTF-8. Для сравнения, кодировка base64 будет использовать 40 символов, что займет 80 байтов UTF-16 или 40 байтов UTF-8. Подход, который был разработан для использования того же пространства в UTF-8 или UTF-16, может хранить 48 битов в трех символах, которые занимают восемь байтов в UTF-8 или UTF-16, таким образом сохраняя 240 битов в 40 байтах любой UTF. -8 или UTF-16.
Существуют ли какие-либо стандарты для чего-либо подобного?