# Схема кодирования данных (DCS)

> Схема кодирования данных (DCS) — это однооктетное поле (data_coding в SMPP, TP-DCS в GSM), сообщающее сети, как закодировано тело сообщения и опционально его класс. Три значимых значения — 0x00 (GSM-7 по умолчанию), 0x04 (8-битный двоичный) и 0x08 (UCS-2/Unicode). Более старшие группы кодирования добавляют поведение класса сообщения и flash.

- Канонический URL: https://www.broadnet.me/ru/reference/data-coding-scheme-dcs
- Язык: ru
- Последнее обновление: 2026-07-18
- Издатель: BroadNet (https://www.broadnet.me)

Байт схемы кодирования данных, сообщающий сети, как закодировано SMS: GSM-7 (0x00), 8-бит (0x04), UCS-2 (0x08), плюс классы сообщений (0/flash до 3/SIM) из GSM 03.38.

## Три значения, используемые ежедневно

Почти для всего текстового трафика A2P DCS равен одному из трёх значений. 0x00 выбирает алфавит по умолчанию GSM-7. 0x04 выбирает 8-битный двоичный формат (используется для OTA, WAP push и других данных, не для человеческого текста). 0x08 выбирает UCS-2 для Unicode. Неверное значение вызывает крякозябры и неправильную сегментацию, поэтому оно должно соответствовать тому, как вы фактически закодировали short_message.

*Распространённые значения data_coding / DCS*

| Значение | Кодировка | Использовать |
|---|---|---|
| 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).

*Структура групп кодирования DCS (выборка)*

| Старший полубайт | Группа | Значение младших битов |
|---|---|---|
| 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) используется для оповещений, которые должны появиться мгновенно.

*Классы сообщений SMS*

| Класс | Назначение | Поведение |
|---|---|---|
| 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 в соответствии с отправляемыми байтами.

## Источники

- [3GPP TS 23.038 — data coding scheme (§4)](https://www.3gpp.org/dynareport/23038.htm)
- [SMPP v3.4 specification — data_coding](https://smpp.org/SMPP_v3_4_Issue1_2.pdf)

## См. также

- [Набор символов GSM-7](https://www.broadnet.me/ru/reference/gsm7-character-set)
- [UCS-2 и Unicode SMS](https://www.broadnet.me/ru/reference/ucs2-unicode-sms)
- [Справочник по submit_sm в SMPP](https://www.broadnet.me/ru/reference/smpp-submit-sm)
- [Калькулятор сегментов SMS (бесплатный инструмент)](https://www.broadnet.me/ru/tools/sms-segment-calculator)
- [Продукт A2P SMS](https://www.broadnet.me/ru/products/a2p-sms)
