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

UCS-2 и Unicode SMS

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

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

§01

Зачем SMS нужен UCS-2

GSM-7 покрывает лишь 128 символов плюс небольшой набор расширения. Всё остальное — арабица, китайский, кириллица, иврит, тайский, эмодзи и даже типографские символы вроде типографских кавычек и коротких тире — непредставимо. Для них SMS переключается на UCS-2, кодировку фиксированной ширины в 16 бит (фактически UTF-16 в обратном порядке байтов для базовой многоязычной плоскости). Она сигнализируется значением data_coding 0x08.

§02

Ёмкость: 70 и 67

Поле пользовательских данных SMS составляет 140 октетов. При двух октетах на символ UCS-2 умещает 70 символов в одно сообщение. Когда сообщение конкатенируется, 6-байтовый User Data Header занимает часть полезной нагрузки, оставляя 134 октета — 67 символов на сегмент. Это меньше половины ёмкости GSM-7, поэтому выбор кодировки сильно влияет на стоимость.

Ёмкость на сообщение по кодировкам
КодировкаОдиночный SMSНа каждый сегмент составного сообщения
GSM-7 (7-bit)160 симв.153 симв.
8-битный двоичный код140 байт134 байта
UCS-2 (16-bit)70 симв.67 символов
§03

Что запускает UCS-2

Кодировка выбирается по принципу «всё или ничего» на сообщение: один символ вне GSM-7 вынуждает всё сообщение перейти на UCS-2, снижая ёмкость со 160 до 70. Распространённые виновники легко внести случайно — типографский апостроф из текстового редактора, длинное тире, эмодзи или нелатинское имя. Обнаружение их перед отправкой — самый мощный рычаг влияния на стоимость SMS.

Символы, вынуждающие UCS-2
КатегорияПримеры
Emoji😀 ✅ 🚀 ❤️
Типографская пунктуация' ' “ ” – — …
Нелатинские алфавитыالعربية · 中文 · Кириллица · עברית · ไทย
Буквы с диакритикой, отсутствующие в GSM-7â ê î ô û ã õ ą ę ř
§04

Оговорка о суррогатных парах

UCS-2 строго 16-битна и покрывает базовую многоязычную плоскость Unicode. Символы выше U+FFFF — например, многие современные эмодзи — представляются в UTF-16 суррогатными парами из двух 16-битных кодовых единиц, поэтому один такой эмодзи занимает четыре октета (два «символа» UCS-2). Поэтому сообщение, выглядящее как один эмодзи, может считаться за два в пределе 70/67.

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

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

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

70 символов в одном сообщении UCS-2 и 67 на сегмент, когда сообщение конкатенируется. Это потому, что каждый символ занимает 16 бит (два октета) при пределе полезной нагрузки SMS в 140 октетов.

Что заставляет SMS переключиться на UCS-2?

Любой одиночный символ вне алфавита GSM-7 — эмодзи, типографская кавычка, длинное тире или нелатинский текст — вынуждает всё сообщение перейти на UCS-2. Кодировка выбирается на сообщение, а не на символ.

UCS-2 — это то же самое, что UTF-16?

Почти. UCS-2 фиксированно 16-битна и покрывает базовую многоязычную плоскость. SMS трактует полезную нагрузку как UTF-16 в обратном порядке байтов, поэтому символы выше U+FFFF (многие эмодзи) становятся суррогатными парами и занимают четыре октета.

Почему один эмодзи иногда считается за два символа?

Эмодзи выше U+FFFF кодируются как суррогатные пары UTF-16 — две 16-битные кодовые единицы — поэтому один глиф занимает две из 70 (или 67) доступных позиций символов UCS-2.

Как случайно не отправить UCS-2?

Очищайте ввод перед отправкой: заменяйте типографские кавычки и тире их ASCII-эквивалентами, удаляйте или транслитерируйте случайные акценты и проверяйте наличие эмодзи. Проверка GSM-7/Unicode отметит конкретные символы, вынуждающие UCS-2.

Ссылки

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

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

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

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

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