BroadNet
кодирование SMSНаборы символов

Набор символов GSM-7

Обновлено 3 мин чтенияна основе стандартов
Прямой ответ

GSM-7 — это 7-битный алфавит по умолчанию, определённый в GSM 03.38 (3GPP TS 23.038) для SMS. Он кодирует 128 символов — латинские буквы, цифры, знаки препинания и несколько акцентированных и греческих символов — по 7 бит каждый. Ещё десять символов находятся в таблице расширения и стоят по два септета. Текст умещается в 160 символов на одно SMS.

§01

Базовая таблица (128 символов)

Алфавит по умолчанию GSM-7 упаковывает 128 символов по 7 бит каждый. Он покрывает заглавный латинский алфавит, цифры, распространённые знаки препинания, набор акцентированных латинских гласных, знаки параграфа и валют и несколько заглавных греческих букв, используемых как символы. Каждый символ здесь стоит ровно один септет (7 бит).

Базовый алфавит GSM-7 (по группам)
ГруппаСимволы
Латинские заглавныеA B C D E F G H I J K L M N O P Q R S T U V W X Y Z
Латинские строчныеa b c d e f g h i j k l m n o p q r s t u v w x y z
Цифры0 1 2 3 4 5 6 7 8 9
Пунктуация! " # % & ' ( ) * + , - . / : ; < = > ? _
Латиница с диакритикойà ä å æ è é ì ñ ò ö ø ù ü Ä Å Æ Ç É Ñ Ö Ø Ü ß
Греческие символыΔ Φ Γ Λ Ω Π Ψ Σ Θ Ξ
Валюта / символы£ $ ¥ ¤ € (ext) § ¡ ¿ @
Пробельные символыSP (пробел), CR, LF
§02

Таблица расширения

Десять символов не входят в базовую таблицу. Они достигаются escape-префиксом (0x1B), за которым следует код символа в таблице расширения, а значит каждый из них стоит два септета, а не один. Включение любого из них в сообщение уменьшает фактическую ёмкость одного SMS. Обратите внимание, что знак евро (€) — один из них.

Таблица расширения GSM-7 — каждый символ стоит 2 септета
СимволИмя
|Вертикальная черта
^Карет / циркумфлекс
€Знак евро
{Левая фигурная скобка
}Правая фигурная скобка
[Левая квадратная скобка
]Правая квадратная скобка
~Тильда
\Обратный слеш
FFПеревод страницы
§03

7-битная упаковка

Поскольку каждый символ занимает 7 бит, а октеты — 8 бит, GSM-7 упаковывает септеты через границы байтов. Восемь 7-битных символов упаковываются в семь 8-битных октетов, поэтому 160 септетов заполняют 140 октетов — предел пользовательских данных SMS. Упаковка сдвигает биты каждого следующего символа для заполнения промежутков, из-за чего наивный побайтовый взгляд на GSM-7 SMS выглядит искажённым.

Упаковка септетов — 160 септетов → 140 октетовtext
8 characters (56 bits) ────► 7 octets (56 bits)
160 GSM-7 septets       ────► 140 octets (the SMS payload limit)
                              (an extension char = 2 septets)
§04

Таблицы переключения языков

3GPP TS 23.038 также определяет национальные таблицы переключения языков (например, турецкую, испанскую, португальскую), которые переназначают некоторые позиции таблицы расширения на специфичные для языка буквы. Поддержка неравномерна среди аппаратов и сетей, поэтому многие отправители избегают полагаться на них и переходят на UCS-2, когда сообщению нужны символы вне базового набора GSM-7.

Часто задаваемые вопросы

Часто задаваемые вопросы

Сколько символов умещается в GSM-7 SMS?

160 символов в одном SMS, поскольку 160 септетов по 7 бит заполняют предел пользовательских данных в 140 октетов. Конкатенированные сообщения GSM-7 снижаются до 153 символов на сегмент, чтобы освободить место для User Data Header.

Какие символы считаются двумя в GSM-7?

Десять символов таблицы расширения — | ^ € { } [ ] ~ \ и form-feed — каждый стоит два септета, потому что им нужен escape-префикс. Использование любого из них уменьшает объём текста, умещающегося в одно SMS.

Есть ли знак евро в GSM-7?

Да, но в таблице расширения, поэтому он стоит два септета, а не один. Поэтому сообщение с € умещает меньше символов, прежде чем ему понадобится второй сегмент.

Почему сообщение GSM-7 выглядит искажённым на уровне байтов?

Потому что GSM-7 упаковывает 7-битные символы через границы 8-битных октетов. Восемь символов занимают семь октетов, поэтому чтение полезной нагрузки по одному байту на символ даёт бессмыслицу — сначала нужно распаковать септеты.

Что произойдёт, если в тексте есть символ не из GSM-7?

Всё сообщение должно переключиться на кодировку UCS-2 (16-битную), что снижает ёмкость одного SMS со 160 до 70 символов. Один символ не из GSM-7 (эмодзи, типографская кавычка или многие нелатинские буквы) вынуждает это.

Ссылки

Технические характеристики источника

На этой странице представлены опубликованные стандарты, на которых они основаны. (Открывается в новой вкладке)

BNПоддерживается инженерной командой BroadNet·Обмен сообщениями операторского класса с 2003 года.
Прикрепите это к проводу

Разработано с использованием реального SMPP подключения и REST API.

Запросите тестовый доступ с реальными тестовыми ключами: сначала отправьте их на свой подтвержденный номер, а затем, после утверждения вашей личности отправителя и маршрутов, переходите к использованию в производственной среде более чем в 200 странах.