# UCS-2 and Unicode SMS

> UCS-2 is the 16-bit encoding SMS uses for any text that contains characters outside the GSM-7 alphabet — non-Latin scripts, emoji, curly quotes. Each character takes two octets, so a single UCS-2 SMS holds 70 characters and concatenated segments hold 67 each. A single non-GSM-7 character forces the whole message to UCS-2.

- Canonical URL: https://www.broadnet.me/reference/ucs2-unicode-sms
- Language: en
- Last updated: 2026-07-18
- Publisher: BroadNet (https://www.broadnet.me)

How SMS carries Unicode via UCS-2 (16-bit): the 70-character single-message limit, 67 per concatenated segment, what forces UCS-2, and the surrogate-pair caveat for emoji.

## Why SMS needs UCS-2

GSM-7 covers only 128 characters plus a small extension set. Anything else — Arabic, Chinese, Cyrillic, Hebrew, Thai, emoji, and even typographic characters like curly quotes and en-dashes — is not representable. For those, SMS switches to UCS-2, a fixed-width 16-bit encoding (effectively UTF-16 big-endian for the Basic Multilingual Plane). It is signalled by data_coding 0x08.

## Capacity: 70 and 67

The SMS user-data field is 140 octets. At two octets per character, UCS-2 fits 70 characters in a single message. When a message is concatenated, the 6-byte User Data Header consumes payload, leaving 134 octets — 67 characters per segment. This is less than half of GSM-7's capacity, which is why encoding choice has a large cost impact.

*Per-message capacity by encoding*

| Encoding | Single SMS | Per concatenated segment |
|---|---|---|
| GSM-7 (7-bit) | 160 chars | 153 chars |
| 8-bit binary | 140 bytes | 134 bytes |
| UCS-2 (16-bit) | 70 chars | 67 chars |

## What triggers UCS-2

Encoding is all-or-nothing per message: a single character outside GSM-7 forces the entire message to UCS-2, dropping capacity from 160 to 70. Common culprits are easy to introduce accidentally — a curly apostrophe from a word processor, an em-dash, an emoji, or a non-Latin name. Detecting these before sending is the single biggest lever on SMS cost.

*Characters that force UCS-2*

| Category | Examples |
|---|---|
| Emoji | 😀 ✅ 🚀 ❤️ |
| Smart punctuation | ' ' “ ” – — … |
| Non-Latin scripts | العربية · 中文 · Кириллица · עברית · ไทย |
| Accented letters not in GSM-7 | â ê î ô û ã õ ą ę ř |

## The surrogate-pair caveat

UCS-2 is strictly 16-bit and covers the Unicode Basic Multilingual Plane. Characters above U+FFFF — many modern emoji, for instance — are represented in UTF-16 as surrogate pairs of two 16-bit code units, so a single such emoji consumes four octets (two UCS-2 'characters'). A message that looks like one emoji can therefore count as two toward the 70/67 limit.

## Frequently asked questions

### How many characters fit in a Unicode SMS?

70 characters in a single UCS-2 message, and 67 per segment when the message is concatenated. That is because each character is 16 bits (two octets) against the 140-octet SMS payload limit.

### What makes an SMS switch to UCS-2?

Any single character outside the GSM-7 alphabet — an emoji, a curly quote, an em-dash, or non-Latin text — forces the entire message to UCS-2. Encoding is chosen per message, not per character.

### Is UCS-2 the same as UTF-16?

Nearly. UCS-2 is fixed 16-bit and covers the Basic Multilingual Plane. SMS treats the payload as UTF-16 big-endian, so characters above U+FFFF (many emoji) become surrogate pairs and take four octets.

### Why does one emoji sometimes count as two characters?

Emoji above U+FFFF are encoded as UTF-16 surrogate pairs — two 16-bit code units — so a single glyph consumes two of the 70 (or 67) available UCS-2 character slots.

### How do I avoid accidentally sending UCS-2?

Sanitise input before sending: replace smart quotes and dashes with their ASCII equivalents, strip or transliterate stray accents, and check for emoji. A GSM-7/Unicode checker flags the exact characters forcing UCS-2.

## Sources

- [3GPP TS 23.038 — alphabets and data coding](https://www.3gpp.org/dynareport/23038.htm)
- [3GPP TS 23.040 — SMS technical realization](https://www.3gpp.org/dynareport/23040.htm)

## Related

- [The GSM-7 character set](https://www.broadnet.me/reference/gsm7-character-set)
- [Data coding scheme (DCS)](https://www.broadnet.me/reference/data-coding-scheme-dcs)
- [Encoding detection & cost](https://www.broadnet.me/reference/encoding-detection-and-cost)
- [GSM-7 / Unicode checker (free tool)](https://www.broadnet.me/tools/gsm7-unicode-checker)
- [SMS segment calculator (free tool)](https://www.broadnet.me/tools/sms-segment-calculator)
