Определение
GSM-7 — стандартный 7-битный алфавит SMS, определённый в 3GPP TS 23.038 (ранее GSM 03.38). В одно SMS помещается 160 символов, а если сообщение разбивается на части, то по 153 символа в каждой.
Одно SMS передаёт до 140 октетов пользовательских данных (3GPP TS 23.040). При упаковке 7-битных символов получается 140 × 8 / 7 = 160 символов. GSM-7 включает базовые латинские буквы, цифры, распространённые знаки препинания, а также некоторые буквы с диакритическими знаками и греческие буквы.
Часть символов находится в таблице расширения и вызывается через escape-символ, поэтому каждый такой символ считается за два: перевод страницы (form feed) и ^ { } \ [ ] ~ | €. Поэтому в сообщении с несколькими знаками евро или фигурными скобками помещается меньше 160 видимых символов.
Если в сообщении есть хотя бы один символ вне GSM-7 и его таблицы расширения — арабская буква, эмодзи или типографская кавычка, вставленная из текстового редактора, — всё сообщение переключается на UCS-2. В одно SMS в этой кодировке помещается только 70 символов.
В длинных сообщениях заголовок пользовательских данных (user data header) занимает место в каждом сегменте, поэтому в одной части остаётся 153 символа GSM-7 (152 при 16-битном номере ссылки). Символ с escape-кодом никогда не делится между двумя сегментами.
Проверяйте сообщения перед рассылкой: замена одной типографской кавычки на прямую может вдвое сократить число оплачиваемых сегментов.
Пример
"Your code is 123456" = 19 символов GSM-7, 1 сегмент. "Price: 20€" = 10 символов, но 11 септетов, потому что € передаётся как escape-символ + код.