SMS Length & Unicode: Character Limits Explained (2026)

SMS Length & Unicode: Character Limits Explained (2026)

SMS character limit shown across three encodings: a full-length bar for the GSM-7 default alphabet at 160 characters, a shorter bar for the GSM-7 extension table, and a bar under half the length for UCS-2 Unicode at 70 characters, with the cedi sign marked as sitting in neither GSM-7 table.

A single SMS holds 160 characters with standard GSM-7 encoding, or 70 characters when it contains Unicode (UCS-2). Anything longer splits into concatenated segments of 153 or 67 characters each, and each segment bills separately.

That one rule explains most surprises in SMS sending: why your SMS character limit suddenly drops to 70, why one emoji turns a 160-character text into three messages, and why a long message costs more to send. Here is how it works, which specification each number actually comes from, and how to keep your messages from quietly costing more.

SMS character limit and length: quick reference

Every SMS carries the same 140-octet (140-byte) body. The encoding decides how many characters fit inside it, and GSM-7 has two tiers rather than one.

EncodingSingle SMSPer segment when concatenatedWhat one character costs
GSM-7 default alphabet (letters, digits, common punctuation)160 characters153 characters7 bits
GSM-7 extension table (nine symbols, listed below)Fewer than 160; each of these counts twiceFewer than 15314 bits
Unicode / UCS-2 (emoji, smart quotes, ₵ and ¢, non-Latin scripts)70 characters67 characters16 bits

The single-message figures come from 3GPP TS 23.038, the specification that defines the SMS alphabets and data coding schemes. The per-segment figures come from a different document, 3GPP TS 23.040, clause 9.2.3.24.1, which covers the technical realisation of the service. TS 23.038 defines no per-segment figures; the two specifications answer two different questions.

The GSM-7 vs UCS-2 choice is never yours to make directly. The characters you type make it for you.

What is the SMS character limit, and where does 160 come from?

The SMS character limit is 160 characters for a single message using GSM-7, the default 7-bit alphabet for text messaging.

It traces back to the size of the payload. The body of a single SMS is limited to 140 octets, and TS 23.038 does the arithmetic itself: “Therefore, in 140 octets, it is possible to pack (140×8)/7=160 characters.”

So the 160-character limit is not a random number. It is the most characters you can pack into 140 octets at 7 bits each.

Why do some texts only allow 70 characters?

Because the moment your message contains a character outside GSM-7, the whole message is encoded as Unicode. The Unicode SMS character limit is 70 characters, down from 160.

The same specification states it plainly: a UCS-2 coded message “can consist of up to 140 octets, i.e. up to 70 UCS2 characters”. Unicode characters take 16 bits each instead of 7, so far fewer fit into the same 140 octets. (UCS2 is the specification’s own spelling; you will also see it written UCS-2.)

One emoji, one curly quote or one cedi sign drops the whole message from 160 characters to 70.

Which characters force Unicode encoding?

A non-GSM character is any character that is not in the GSM-7 tables, and a single one forces the whole message into UCS-2 and cuts your limit to 70 characters. The non-GSM characters that do it:

  • Emoji — every emoji is a Unicode character. A single 😊 triggers UCS-2.
  • Curly or smart quotes — “ ” ‘ ’, the styled quotes word processors insert automatically. Straight quotes ” ‘ are safe.
  • Accented characters outside the GSM-7 set — the default alphabet already holds é, è, ñ, ü, å, ä, ö and à, so those stay in GSM-7. Characters like č, ș, ł and lowercase ç are in neither table, and any one of them switches the message to Unicode.
  • Non-Latin scripts — Arabic, Chinese, Cyrillic, Hindi and Amharic are all Unicode.
  • Typographic characters — the em dash (—) and the ellipsis (…).
  • Most currency symbols — including the cedi sign (₵) and the cent sign (¢) in the common GH¢ rendering. That case gets its own section below.

The GSM-7 default alphabet covers the Latin letters, digits, common punctuation and a handful of accented European letters. Staying inside GSM-7 keeps your message out of Unicode. It does not automatically leave you all 160 characters, because GSM-7 is two tables rather than one.

A stray smart quote pasted in from a document is easy to miss. Replace it with a straight quote and you get 90 characters back.

What is the difference between the GSM-7 default alphabet and the extension table?

Chart sorting SMS characters into three encoding tiers: the GSM-7 default alphabet at 160 characters holding Latin letters, digits, punctuation and the £, $, ¥ and ¤ symbols; the GSM-7 extension table holding € [ ] { } \ ~ ^ | where each symbol counts twice; and UCS-2 Unicode at 70 characters holding emoji, smart quotes, the em dash, the ellipsis, an Arabic and a Cyrillic letter standing for most non-Latin scripts, and the cent and cedi signs.

Nine symbols sit in the GSM-7 extension table rather than in the default alphabet: € [ ] { } \ ~ ^ |. Each one is sent as an escape character followed by the symbol itself, which is two seven-bit slots instead of one.

TS 23.038 states the consequence as a rule: “If the GSM 7 bit default alphabet extension mechanism is used then the number of displayable characters will reduce by one for every instance where the GSM 7 bit default alphabet extension table is used.”

Read that literally, because it is literal. A message with ten euro signs in it never leaves GSM-7 and never becomes a Unicode message. It simply holds 150 displayable characters instead of 160.

The extension table exists for symbols of exactly this kind. TS 23.038 introduces it as “reserved for symbols of international significance (e.g currency symbols)”.

The euro sign made that list. The cedi did not.

Does the cedi sign (₵) work in a standard SMS?

No. Neither the cedi sign (₵) nor the cent sign (¢) appears in the GSM-7 default alphabet or in the GSM-7 extension table, so a message containing either one is encoded as UCS-2 and its limit drops from 160 characters to 70.

For anyone writing price copy in Ghana that makes it the most expensive character on the keyboard. The cent sign matters more than the cedi sign in practice, because GH¢ is a common way to write a price locally.

What is in the tables: ¤, £, $ and ¥ sit in the default alphabet, and € sits in the extension table. The cedi is in neither.

It is an ordinary Unicode character everywhere else, and the Unicode Consortium encodes the cedi sign at U+20B5 as CEDI SIGN and annotates it Ghana. That is the whole problem: Unicode is where SMS stops giving you 160 characters.

What it costs on a real campaign

The same 150-character SMS promotion written two ways: with the price as GH¢50 the message is UCS-2 Unicode and is billed as three segments, while writing the price as GHS 50 keeps every character in the GSM-7 default alphabet and the message is billed as one segment.

Take a 150-character promotion. Written entirely in the GSM-7 default alphabet, it is one segment, billed once.

Write the same 150 characters with the price as GH¢50 and the message is a Unicode message. At 67 characters per segment, 150 characters needs three segments, so the same campaign to the same list is billed three times over.

Write the price as GHS 50 instead, or spell the amount out in words as fifty cedis, and every character in it is a Latin letter, a digit or a space. All of those sit in the GSM-7 default alphabet, so the message stays at 160 characters and one segment, and the campaign bills once.

Before a priced campaign goes out, send the exact copy to your own number and check what that one send registered as: one segment or three. Our guide to SMS delivery reports covers what comes back after a send and how to read it. A send that registers as three is telling you the encoding switched, and you can fix the copy before it reaches your whole list.

If you are planning the campaign end to end, our guide to SMS marketing in Ghana covers the rest of it.

How does SMS message segmentation work, and who splits the message?

Not the carrier. TS 23.040 is specific about where segmentation happens: “The relation between segments of a concatenated message is made only at the originator, where the message is segmented, and at the recipient, where the message is reassembled.” The originator is the sending end, meaning the handset or the application that submits the message. The service centre in between is not doing the work; the same clause says a service centre “shall handle segments of a concatenated message like any other short message”.

The split is therefore decided before your message reaches the network, which is why what you pay is set by the copy you submit.

Each segment gives up six of those 140 octets to a User Data Header, leaving 134 octets for text. The User Data Header is a small block of metadata that tells the receiving phone how to reassemble the parts, and it has to be present in every segment.

That is where the missing characters go. TS 23.040 states the results outright: each segment of a concatenated SMS carries at most 153 GSM-7 characters, or 67 characters when the message is encoded as 16-bit UCS-2. The specification prints its own working beside them, “153 (160-7)” for GSM-7 and “67 ((140-6)/2)” for UCS-2.

For anyone sending at scale, segments rather than messages are the unit that matters. A 320-character GSM-7 message is three segments. The same message with one emoji becomes Unicode, and at 67 characters per segment, 320 characters now needs five.

Merge fields are where this catches people out. Copy that fits one segment while you are testing it can spill into a second once a long customer name is substituted in, which our guide to personalising messages at scale covers. Developers working closer to the wire will find the concatenation rules in clause 9.2.3.24 of TS 23.040, and the bulk SMS API integration guide covers the sending side.

Why is my message being sent (and billed) as 2 or more messages?

Your message crossed the single-segment limit. Two things commonly push it over:

  • Length — your text ran past 160 characters (GSM-7) or 70 (Unicode).
  • Encoding — one non-GSM character pulled the limit down to 70, and to 67 per segment, so copy you expected to fit in one segment now needs two or more.

The Arkesel SMS Platform bills per segment rather than per message, so a message that splits is charged as several messages. That is why one emoji or one currency symbol can multiply what a campaign costs without changing a word of the copy.

Tight, GSM-7-only copy keeps your character count and your sending costs down together. For the rest of what moves the number on the invoice, see what determines bulk SMS cost in Ghana, and for current rates see Arkesel pricing.

Why some sources say 152 and 66 characters per segment

Both pairs of numbers are correct. They describe two variants of the same facility.

TS 23.040 defines a second form of concatenation that uses a 16-bit reference number instead of an 8-bit one. It spends one more octet per segment, so its segments hold 152 GSM-7 characters or 66 UCS-2 characters, set out in clause 9.2.3.24.8 against the 153 and 67 of clause 9.2.3.24.1.

If you find 152 and 66 quoted somewhere, you have not found an error. You have found the 16-bit variant.

SMS length quick FAQ

How many characters are in one SMS?

160 characters with GSM-7 encoding, or 70 characters with Unicode (UCS-2).

What is the maximum length of a concatenated SMS?

There is a cap, and TS 23.040 clause 9.2.3.24.1 states it: 39,015 GSM-7 characters or 17,085 Unicode characters, which is 255 segments. Your budget will stop you long before the standard does, because every segment is billed.

Why does my SMS character limit drop to 70?

Your message carries a character that is not in the GSM-7 tables — an emoji, a curly quote, a currency symbol such as ₵ or ¢, or a non-Latin script. Any one of them switches the whole message to Unicode encoding.

Does an emoji really change the SMS length?

Yes. A single emoji recodes the entire message to Unicode and drops the limit from 160 to 70 characters. A full 160-character message that picks up one emoji needs three segments, not two, because concatenated Unicode segments hold 67 characters each.

Who splits a long SMS into segments?

The originator does, meaning the handset or the application that submits the message. The receiving phone reassembles it, and the service centre in between handles each segment like any other short message.

How many characters per segment in a multipart SMS?

153 for GSM-7 and 67 for Unicode, slightly fewer than a single message because the User Data Header reserves space to reassemble the parts.

Is the cedi sign (₵) supported in a standard SMS?

No. The cedi sign is not in the GSM-7 default alphabet or its extension table, and neither is the cent sign in GH¢. Either one makes the message a Unicode message at 70 characters, and 67 per segment once it splits.

Check the copy before you check the budget

Knowing the SMS character limit is the easy part. The saving comes from testing your own copy. Before a priced campaign reaches anyone, send the exact message to your own number and check what that one send registered as, and you will know what the campaign costs per recipient while the copy can still be changed.

When the copy is ready, the Arkesel SMS Platform delivers it across Ghana, Nigeria, South Africa and Tanzania.

Scroll to Top