2015-05-09 3 views
1

У меня есть несколько коротких строк utf16, которые мне нужно сжать (каждый длиной около 20-200 символов).Сжатие коротких буферов строк unicode (utf16)

Строка почти всегда создается с использованием только английских символов и цифр.

Возможно, я могу написать некоторое сжатие, которое будет иметь около 50% результатов.

Ищет идею/реализацию.

Im использованием C#

+1

Я могу преобразовать его в UTF8 и добиться почти 50% сжатия ... :-) – xanatos

+0

Дело в том, что вы хотите сделать с этими строками после сжатия? Сжатая строка или строка, преобразованная в UTF8, является 'byte []', поэтому что-то не очень хорошо для работы над ней. Вы можете сохранить его, загрузить, передать. – xanatos

+0

Вы можете увидеть http://stackoverflow.com/a/7343623/613130 ​​- это то, что вы хотите. .NET 'string' - это строки UTF16. – xanatos

ответ

1
  1. Использование UTF-8. Это дает вам 50% вы просили.
  2. Вы можете легко добиться большего, воспользовавшись тем, что почти все старшие разряды этих байтов будут равны нулю для текста на английском языке.
  3. Затем вы можете применить общее предварительно вычисленное дерево Хаффмана, чтобы воспользоваться распределением букв.
  4. Для строк, которые довольно длинные (например,> 100 символов), я мог представить, что использование Deflate или что-то вроде этого начинает действовать. После преобразования в UTF-8 я использую Deflate.
  5. Если вы хотите использовать общий словарь, вы можете добиться гораздо большего сжатия. Этот словарь должен быть предварительно вычислен и разделен на весь корпус.