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.
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.
| 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.
| 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
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.
Source specifications
The published standards this page is grounded in. Opens in a new tab.