Очевидно, у вас есть определенный набор символов, и вы хотите использовать его как для исходной строки, так и для сжатой строки.
Стандартные процедуры сжатия (например, gzip ) работают с байтомstrings.
Одна из идей - взять существующий код (например, gzip) и переписать его, чтобы использовать ваш набор символов вместо байтов.
Другой вариант - построить отображение 1-к-1 между строками.в вашем наборе символов и произвольных строках байтов отобразите исходную строку в строку байтов, сожмите строку байтов с помощью стандартной утилиты или функции сжатия и отобразите результат обратно в строку, используя ваш набор символов.(Строго говоря, вы можете использовать два разных сопоставления.)
Один из способов построения сопоставления состоит в том, чтобы дополнить ваш набор символов манекенами и специальным символом дополнения, пока у вас не будет 2 ^ k разных символов (для некоторого k);тогда каждый из 8 ваших символов соответствует k байтов (и более короткие строки могут быть дополнены символом pad).