Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #75, МАРТ 2005 г.

Мобильная архивация

Филипп Коряка

Хакер, номер #075, стр. 075-114-1


(phil@pereslavl.ru)

Сжимаем SMS на J2ME!

Размер SMS-сообщения сильно ограничен, что правда, то правда. Ограничен он 160 символами для СМСок состоящих только из латиницы и 70 символами для тех, в тексте которых, содержатся символы национальных языков, например, русского. Причем достаточно всего одной русской буквы в сообщении, что бы его максимальный размер уменьшился более чем вдвое. Давай попробуем разобраться, с чем это связанно, ликвидировать этот ужасный недостаток и вообще немного расширить возможный объем SMS.

Кодирование текста

Еще со школы нам известно, что компьютеры и прочие железяки не понимают никаких букв, а представляют всю информацию исключительно в виде набора ноликов и единичек. Соответствие между символами и их цифровым представлением называется кодировкой. В мире существует огромное множество кодировок. Самые распространенные среди них условно можно разделить на три класса: восьмибитные, семибитные, и шестнадцатибитные.

В восьмибитных кодировках для представления одного символа требуется 8 бит или 1 байт, из чего следует, что такой кодировкой можно охватить 256 символов.

В семибитных на кодирование символа отводится уже 7 бит, а количество возможных символов равно 128.

В шестнадцатибитных же кодировках символ кодируется аж 2 байтами, при этом количество охватываемых символов - 65536. Внушительный объем кодировки позволяет вместить в себя символы всех существующих национальных алфавитов одновременно, в отличие от, скажем, восьмибитовых кодировок, которые вмещают только латиницу и еще один национальный алфавит. Представителем шестнадцатибитной кодировки является unicode.

Для кодирования текста SMS используется семибитная кодировка, в случае если в текст состоит только из символов латинского алфавита. А поскольку максимальный объем SMS-сообщения в соответствии со стандартами составляет 1120 бит, то легко подсчитать максимальное количество символов. Оно равно 1120/7 = 160.

Как только в тексте сообщения появляется символ, скажем, кириллицы, кодировка меняется с семибитной на Unicode с ее двумя байтами на символ. Максимальный объем СМСки при этом становится равным 1120/16 = 70.

Unicode как и все универсальное выигрывает в общем случае, но в некоторых частных случаях можно предложить более рациональный алгоритм.

Долой Unicode

Попробуем придумать свою собственную кодировку, при использовании которой влезало бы больше текста в одно сообщение. Сформулируем требования к ней: кодировка должна позволять использовать символы латиницы и кириллицы, цифры от 0 до 9, а также – символы: ".,!?-_"/:@". Максимальный объем сообщения, представленного нашей кодировкой должен быть не менее 160 символов, а лучше более.

За основу нашей кодировки возьмем шестибитное кодирование. Оно позволяет закодировать 64 символа и в отведенные нам стандартом 1120 бит поместится 186 таких символов.

Разместить в таблице из 64 элементов символы двух алфавитов, знаки препинания и цифры нам не удастся, они просто все не влезут. Поэтому нужно сделать так, чтобы одному коду могло сразу несколько символов, переключение между которым осуществлялось бы с помощью других специальных. Подобная система очень напоминает клавиатуру, где на каждой клавише расположено несколько символов (разного регистра или языка), и выбор осуществляется нажатием клавиши Shift.

Содержание  Вперед на стр. 075-114-2
хорошая вакансиям rabota неполный день
<<< НАЗАД ||| ГЛАВНАЯ