Эффективное преобразование двоичного кода в строку (например, base64, но для UTF8 / UTF16)?

У меня есть много пакетов двоичных данных, начиная с 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.

Существуют ли какие-либо стандарты для чего-либо подобного?

5
задан supercat 22 October 2010 в 15:54
поделиться