Онлайн-кодировщик PDU для сообщений SMS-SUBMIT
Превратите сообщение в шестнадцатеричную строку, которую модем GSM ожидает в режиме PDU. Кодировщик упаковывает септеты GSM-7, переходит в UCS-2 при необходимости и добавляет UDH, когда сообщение требует нескольких частей.
Соберите сообщение в PDU SMS-SUBMIT
Форма открывается с готовым примером. Измените текст, номер или параметры и нажмите «Кодировать». Результат строится JavaScript на этом компьютере.
Кодировщик PDU
Без сети| Часть | UDH | Текст в этой части |
|---|
Каждый блок начинается строкой ----- PDU n/total -----. В режиме PDU отправляйте шестнадцатеричные символы каждого блока отдельно.
Ничто из введённого здесь никуда не отправляется. Страница работает из локального файла или из офлайн-копии сайта.
Что такое режим PDU
Режим PDU передаёт модему полный кадр протокола вместо простой строки.
SMS — не только текст. Вокруг сообщения стоят адрес сервисного центра, получатель, маркер кодировки, срок действия и поле длины. В текстовом режиме (AT+CMGF=1) модем заполняет их сам и показывает только читаемую часть. В режиме PDU (AT+CMGF=0) вы задаёте весь кадр в шестнадцатеричном виде, поэтому каждое поле под вашим контролем.
Кадр определён в 3GPP TS 23.040; алфавит символов и его 7-битная упаковка — в TS 23.038. Кодировщик следует обоим: удаляет из номера всё, кроме цифр, меняет местами пары в BCD, задаёт октет типа адреса, выбирает GSM-7 или UCS-2, упаковывает септеты по порядку и включает признак заголовка пользовательских данных, когда сообщение разбито.
Почему текст выглядит странно. Семибитные символы упакованы в восьмибитные октеты, поэтому один септет может занимать два байта. PDU GSM-7 — не посимвольный дамп байтов, и правка вручную легко его ломает.
Почему важен первый октет. Октет после сервисного центра несёт тип сообщения, признак отчёта о доставке и признак объединения. Кодировщик пишет 0x01 плюс 0x40 для составного сообщения, 0x10 при заданном сроке действия и 0x20, когда запрошен отчёт.
Структура полей SMS-SUBMIT
Читая результат слева направо, поля идут так:
| Поле | Октеты | Что несёт | Что пишет кодировщик |
|---|---|---|---|
| SCA | 1 + n | Адрес сервисного центра и октет типа адреса | 00, если поле пустое; иначе октет длины, тип адреса и BCD-цифры |
| Первый октет | 1 | Тип сообщения, формат срока действия, запрос отчёта, признак заголовка данных | 01 для SMS-SUBMIT, плюс 40, 10 и 20 по необходимости |
| MR | 1 | Ссылка на сообщение, которую увеличивает аппарат | Ссылка объединения, усечённая до одного октета; 00, если не задана |
| Получатель | 2 + n | Длина номера, тип адреса и BCD-цифры | 81 для национального номера, 91, если ввод начинается с + |
| PID | 1 | Идентификатор протокола | 00, обычное короткое сообщение |
| DCS | 1 | Алфавит и класс сообщения | 00 GSM-7, 08 UCS-2, 10 или 18 для flash-сообщения |
| VP | 0, 1 или 7 | Срок действия: относительный, расширенный или абсолютный | Не включается при 0 часов; иначе один относительный октет, шаг которого растёт с диапазоном (5 минут, полчаса, сутки, неделя) |
| UDL | 1 | Длина пользовательских данных | Число септетов для GSM-7 (UDH считается в септетах), число октетов для UCS-2 |
| UD | n | Необязательный UDH плюс упакованный текст | 7-битная упаковка после выровненного UDH или UCS-2 в порядке от старшего байта |
Относительный срок действия занимает один октет: значения 0–143 считают шагами по 5 минут до 12 часов, 144–169 — по полчаса до 24 часов, 170–196 — сутками до 30 дней, 197–255 — неделями дальше, всё от момента получения сообщения сервисным центром. Инструмент принимает 0–8760 часов (около года).
GSM-7, UCS-2 и составные SMS
Один PDU несёт 140 октетов. Сколько символов поместится, зависит от алфавита и от наличия UDH.
| Кодировка | Один PDU | С 8-битным UDH | С 16-битным UDH |
|---|---|---|---|
| GSM-7 | 160 септетов | 153 септета | 152 септета |
| UCS-2 | 70 единиц | 67 единиц | 66 единиц |
UDH из 6 байт занимает 48 бит, что округляется до 7 септетных слотов в GSM-7; 16-битная ссылка добавляет ещё один октет и ещё один слот. Поэтому пределы разбиения — 153 или 152, а не 160.
GSM-7 охватывает латинские буквы, цифры и пунктуацию исходного алфавита GSM. Десять символов требуют двух септетов: €, ^, {, }, [, ], ~, |, обратная косая черта и символ перевода страницы. Кодировщик пишет перед каждым из них escape-код 1B и никогда не разрывает пару между частями. Всё вне обеих таблиц вынуждает UCS-2, где символ занимает два октета, а предел падает до 70.
Разобранные примеры
Эти результаты берутся из регрессионного файла, который поставляется с этой страницей. Входные данные неизменны, а ожидаемая шестнадцатеричная строка получена независимой реализацией TS 23.038 / TS 23.040.
| Вход | Кодировка | PDU |
|---|---|---|
| Hello SMSDeliverer.com! | GSM-7, национальный номер, без сервисного центра | 000100098121436587F9000017C8329BFD064D9B5362999DB697E565B96BFC6E8700 |
| € | GSM-7, символ расширения | 000100098121436587F90000029B32 |
| 您好,世界! | UCS-2 | 000100098121436587F900080C60A8597DFF0C4E16754CFF01 |
Тестовая запись — assets/js/tests/pdu-vectors.json. В ней есть и строка, записанная из более старой сборки: этот вектор помечен как падающий, с описанием дефектов; его не правят, пока он не начнёт проходить.
Когда нужен PDU, а не текстовый режим
Текстовый режим легче читать. Режим PDU — единственный способ контролировать то, что реально отправляется.
Длинные сообщения
Составное SMS — несколько PDU, связанных UDH. Части, их порядок и номер ссылки видны только в режиме PDU.
Интеграция
Если вы строите шлюз, тестовый стенд или очередь, передающую кадры в AT+CMGS, нужны точные октеты, а не интерпретация строки модемом.
Диагностика
Искажённый текст, пропавшие буквы с диакритикой и разбитые сообщения обычно означают неверный DCS или сломанный UDH. И то, и другое здесь видно.
Оба режима достигают одной сети и тарифицируются одинаково. Разница в том, где собирается кадр: внутри модема или в программе, которую можно проверить. Если сообщение должно нести конкретный алфавит, срок действия или запрос отчёта, режим PDU — короткий путь. Текстовый режим остаётся для быстрой ручной проверки, а декодер на этом сайте читает любой кадр, когда он приходит.
Нужно автоматическое решение?
Эта страница — справочный инструмент. SMS Deliverer делает ту же работу для каждого сообщения в очереди.
Приложение Windows разбивает длинные сообщения, выбирает GSM-7 или UCS-2, задаёт ссылку UDH, повторяет неудачные части и сохраняет отчёт о доставке рядом с контактом. Один и тот же путь кодирования работает и для одного сообщения, и для нескольких тысяч, а трафик несут SIM-карты в ваших модемах.
Руководство по GSM-модемам объясняет аппаратную часть, страница программы для Windows перечисляет функции отправки и отчётов, а декодер PDU читает кадры, снятые с модема или телефона.
Что входит в результат кодировщика
- Упаковка септетов GSM-7 и пары расширения
- UCS-2 с целыми суррогатными парами
- 8-битные и 16-битные ссылки объединения
- Национальный и международный формат получателя
- Относительный срок действия и класс flash
Проверено 2026-11. Бесплатная пробная версия охватывает весь путь отправки; этому инструменту не нужны лицензия и установка.
Вопросы покупателей
Этот кодировщик бесплатный и нужен ли аккаунт?
Он бесплатный и аккаунт не нужен. Страница состоит из HTML и JavaScript и работает также из офлайн-копии сайта.
Почему мой PDU начинается с 00?
Первый октет — длина адреса сервисного центра. 00 означает, что PDU не несёт сервисного центра, поэтому аппарат или модем использует записанный на SIM. Укажите номер сервисного центра, если хотите записать его в кадр.
Почему длинное сообщение превратилось в несколько PDU?
Один PDU вмещает 140 октетов. GSM-7 вмещает 160 септетов, или 153 при 6-байтном UDH; UCS-2 вмещает 70, или 67 с тем же заголовком. Текст делится по границе символа, и каждой части даётся порядковый номер.
Можно ли отправить результат через AT+CMGS?
Да. Переведите модем в режим PDU командой AT+CMGF=0, затем передайте число октетов кадра после поля сервисного центра. Отправляйте по одной части и сохраняйте порядок: аппарат собирает части по ссылке UDH и порядковым номерам.