Схема кодирования данных (DCS) — это однооктетное поле (data_coding в SMPP, TP-DCS в GSM), сообщающее сети, как закодировано тело сообщения и опционально его класс. Три значимых значения — 0x00 (GSM-7 по умолчанию), 0x04 (8-битный двоичный) и 0x08 (UCS-2/Unicode). Более старшие группы кодирования добавляют поведение класса сообщения и flash.
Три значения, используемые ежедневно
Почти для всего текстового трафика A2P DCS равен одному из трёх значений. 0x00 выбирает алфавит по умолчанию GSM-7. 0x04 выбирает 8-битный двоичный формат (используется для OTA, WAP push и других данных, не для человеческого текста). 0x08 выбирает UCS-2 для Unicode. Неверное значение вызывает крякозябры и неправильную сегментацию, поэтому оно должно соответствовать тому, как вы фактически закодировали short_message.
| Значение | Кодировка | Использовать |
|---|---|---|
| 0x00 | Алфавит GSM-7 по умолчанию | SMS со стандартным латинским текстом |
| 0x01 | IA5 / ASCII | Редко используется |
| 0x03 | Latin-1 (ISO-8859-1) | Некоторые западноевропейские маршруты |
| 0x04 | 8-битный двоичный код | Бинарные / OTA / WAP push полезные нагрузки |
| 0x08 | UCS-2 (UTF-16BE) | Unicode / нелатинские символы / emoji |
Группы кодирования GSM 03.38
Октет DCS — это не плоский перечень: его старший полубайт выбирает группу кодирования, которая переопределяет младшие биты. Общая группа кодирования данных (0x0X) несёт индикатор алфавита (биты 3-2: 00 = GSM-7, 01 = 8-бит, 10 = UCS-2) и опциональные флаги сжатия и класса. Группа кодирования данных/класса сообщения (0xFX) используется для сообщений немедленного отображения (flash).
| Старший полубайт | Группа | Значение младших битов |
|---|---|---|
| 0x0X | Общее кодирование данных | Алфавит (GSM-7 / 8-бит / UCS-2), сжатие, флаг класса |
| 0x1X | Общая, класс указан | Как указано выше, с классом сообщения в битах 1-0 |
| 0xCX | Ожидающее сообщение — отбросить | Группы голосовой почты/индикаторов |
| 0xDX / 0xEX | Ожидающее сообщение — сохранить | Группы индикаторов GSM-7 / UCS-2 |
| 0xFX | Кодирование данных / класс сообщений | Алфавит во 2-м бите, класс в битах 1-0 (flash = класс 0) |
Классы сообщений
Когда DCS указывает класс сообщения, биты 1-0 выбирают, куда сообщение попадёт. Класс 0 — это flash SMS, отображаемое немедленно на экране без сохранения. Класс 1 нацелен на аппарат (ME), класс 2 — на SIM (SIM Toolkit / OTA), а класс 3 — на внешнее оконечное оборудование. Большая часть A2P-текста не несёт класса; flash (класс 0, например DCS 0xF0 для GSM-7) используется для оповещений, которые должны появиться мгновенно.
| Класс | Назначение | Поведение |
|---|---|---|
| Class 0 | Экран | Flash — отображается мгновенно, не сохраняется автоматически |
| Class 1 | Мобильное оборудование (ME) | Сохранено в памяти телефона |
| Class 2 | SIM | SIM Toolkit / OTA-провижининг |
| Class 3 | Терминальное оборудование (TE) | Перенаправлено на внешнее оборудование |
Часто задаваемые вопросы
Что такое схема кодирования данных в SMS?
Это однооктетное поле (data_coding в SMPP, TP-DCS в GSM), сообщающее сети, как закодировано тело сообщения — GSM-7, 8-бит или UCS-2 — и опционально его класс. Оно должно соответствовать тому, как фактически была закодирована полезная нагрузка.
Какое значение data_coding использовать для GSM-7 и для Unicode?
Используйте 0x00 для текста в алфавите GSM-7 и 0x08 для UCS-2 Unicode. 0x04 используйте только для 8-битных двоичных данных вроде OTA или WAP push, никогда для человекочитаемого текста.
Что такое flash SMS?
Flash SMS — это сообщение класса 0, которое появляется немедленно на экране получателя без сохранения во входящих. Оно задаётся через биты класса сообщения в DCS (например, 0xF0 для flash в GSM-7).
Почему моё сообщение пришло искажёнными символами?
Почти всегда это несоответствие DCS: значение data_coding не совпало с фактической кодировкой short_message. Например, отправка байтов UTF-16 с data_coding 0x00 (GSM-7) даёт крякозябры. Устанавливайте data_coding в соответствии с отправляемыми байтами.
Технические характеристики источника
На этой странице представлены опубликованные стандарты, на которых они основаны. (Открывается в новой вкладке)