SMS Character Limit Explained: GSM-7 vs Unicode and How Segments Are Counted
One SMS holds 160 GSM-7 characters or 70 Unicode characters, and split messages hold 153 or 67 each. See which characters flip the encoding and how to count.

A single SMS carries 140 octets. That is 160 characters in the GSM 7-bit alphabet or 70 characters in UCS-2 (Unicode). When a message is longer, each part loses room to a header and holds 153 or 67 characters. One character outside the GSM-7 set, such as an Arabic letter, a curly apostrophe or an emoji, switches the whole message to UCS-2 and can multiply the segment count.
The 160-character rule is not a texting convention. It falls out of the size of the radio payload: 140 octets of user data per message. How many characters fit in those 140 octets depends on the encoding, and the encoding is chosen per message by the characters you type. This guide explains the arithmetic, lists the characters that cost two units or force a switch, and works through concrete examples you can reproduce.
Where 160 and 70 come from
The 3GPP specification for the short message service defines the text of an SMS as at most 140 octets. The GSM 7-bit default alphabet packs seven bits per character, so 140 octets hold (140 x 8) / 7 = 160 characters. The UCS-2 option uses 16 bits per character, so the same 140 octets hold 70. These are the two numbers every SMS tool quotes, and both come straight from the standard rather than from any carrier policy.
| Encoding | Bits per character | Single message | Each part of a longer message |
|---|---|---|---|
| GSM 7-bit default alphabet | 7 | 160 characters | 153 characters |
| UCS-2 (16-bit Unicode) | 16 | 70 characters | 67 characters |
| 8-bit data | 8 | 140 octets | 134 octets |
Which encoding a message uses is set in the data coding scheme field of the message. Your phone or SMS gateway chooses it automatically: if every character is in the GSM alphabet, it uses 7-bit; if even one is not, it falls back to UCS-2 for the entire message. There is no mixed mode inside one message.
Why a longer message holds fewer characters per part
A message longer than one SMS is cut into parts, and each part needs to tell the receiving phone how to reassemble them. The standard does this with a User Data Header placed at the start of the user data. That header takes 6 of the 140 octets, so the room left is 134 octets. For 7-bit text the standard states the limit as 153 characters (160 minus 7), and for UCS-2 it is 67 characters ((140 - 6) / 2).
The same clause caps the concatenated message at 255 parts, which is 39,015 GSM-7 characters or 17,085 UCS-2 characters. In practice your SMS provider will refuse or truncate far earlier, so check its own maximum rather than the specification.
Two edge rules from the standard affect counting. A character that is sent as an escape sequence is never split between two parts, and a UCS-2 character is never split in the middle. If the next character would not fit completely, it moves to the next part, so a part can end one character short of its nominal size.
Characters that cost two units
The GSM alphabet has a basic table of 128 positions and an extension table reached through an escape code. A character from the extension table is sent as two septets: the escape plus the character. It still counts as GSM-7, so it does not force Unicode, but it uses two of your 160 units. The extension table holds these characters:
| Character | Name | Units used |
|---|---|---|
^ | circumflex | 2 |
{ } | curly braces | 2 each |
[ ] | square brackets | 2 each |
~ | tilde | 2 |
| | vertical bar | 2 |
\ | backslash | 2 |
€ | euro sign | 2 |
The basic table also contains some accented letters (such as é, ñ, ü, à) and symbols (£, ¥, @, $), each at one unit. But it lacks others you may expect, so test your own text rather than assuming that a Western European letter is covered.
Characters that flip the whole message to Unicode
Anything outside both tables forces UCS-2. The usual culprits in English marketing copy are typographic characters that word processors insert silently:
- The curly apostrophe
’instead of the straight'. - Curly double quotes
“and”. - The en dash
–and em dash—. - The ellipsis character
…instead of three full stops. - Non-breaking spaces copied from web pages or documents.
- Emoji, and every letter of Arabic, Chinese, Cyrillic (other than the few Greek capitals the GSM table includes) and many other scripts.
Emoji sit outside the 16-bit range, so a UCS-2 or UTF-16 encoder normally writes each one as two 16-bit units, which means one emoji can use two of the 70 slots. Gateways differ in how they handle this, so treat the emoji count as something to verify with your provider.
Worked examples you can verify
The counts below use the rules above: units in GSM-7 (extension characters count twice), segment size 160 or 153 for GSM-7, and 70 or 67 for UCS-2. Each was checked with an independent script against the GSM alphabet tables.
| Message | Characters | Encoding | Units | Segments |
|---|---|---|---|---|
Your code is 482913. It expires in 10 minutes. | 46 | GSM-7 | 46 | 1 |
Sale: 20% off all items {today} only | use code SAVE20 [terms apply] | 68 | GSM-7 | 73 | 1 |
Price: 25€ only | 15 | GSM-7 | 16 | 1 |
159 letters followed by € | 160 | GSM-7 | 161 | 2 |
| 160 plain letters | 160 | GSM-7 | 160 | 1 |
| 161 plain letters | 161 | GSM-7 | 161 | 2 |
| 306 plain letters | 306 | GSM-7 | 306 | 2 |
| 307 plain letters | 307 | GSM-7 | 307 | 3 |
It’s ready | 10 | UCS-2 | 10 | 1 |
| 160 plain letters with one curly apostrophe swapped in | 160 | UCS-2 | 160 | 3 |
The fourth row shows the most common surprise: the message is exactly 160 characters long, yet it needs two segments because the euro sign costs two units. The last row shows the costliest one: a 160-character English message that fits one segment becomes three (160 / 67 rounds up to 3) when a single apostrophe is curly.
Word & Character CounterUnicode-aware counts, reading time and platform limitsOpen the tool →The tool above shows the encoding, the unit count and the segment count for any text you paste, and it runs in your browser, so the message is not sent anywhere.
A formula to count segments by hand
- Decide the encoding: if every character is in the GSM basic or extension table, it is GSM-7; otherwise UCS-2.
- Count units. In GSM-7, add 1 per basic character and 2 per extension character. In UCS-2, add 1 per character (2 for emoji outside the 16-bit range).
- If units are 160 or fewer in GSM-7, or 70 or fewer in UCS-2, it is one segment.
- Otherwise divide by 153 (GSM-7) or 67 (UCS-2) and round up.
Step 4 is a close approximation. Because the standard never splits an escape pair or a UCS-2 character, a text with many extension characters near a boundary can need one more segment than the division suggests. When the exact bill matters, send a test through your gateway and read the part count it reports.
Practical ways to keep messages short
- Straighten punctuation. Replace curly quotes, long dashes and the ellipsis character with their plain ASCII forms before sending. This is the cheapest fix and often saves several segments.
- Spell out currency. Writing EUR instead of the euro sign saves a unit; the pound and yen signs are one unit in GSM-7.
- Avoid brackets and braces in templates unless needed; merge-field delimiters like
{name}disappear after substitution, but check the final text, not the template. - Measure the rendered message, after variables such as names and links are filled in. A short template can grow beyond one segment once a long name is inserted.
- Decide on Arabic and emoji deliberately. If your audience reads Arabic, UCS-2 is unavoidable, so budget 70 and 67 characters rather than 160 and 153.
Common mistakes
- Counting characters instead of units. The bracket and euro rows above show 160 characters needing two segments.
- Testing in a plain editor but sending from a rich one. The curly apostrophe is often invisible until the encoding flips.
- Assuming 160 applies to every language. A single Arabic letter makes it 70 for the whole text, and 67 once it is split.
- Assuming phones handle every character. A device that does not support the extension table shows the escape code as a space, so avoid the extension characters in critical text such as codes and links.
If you also write email, the same discipline of measuring the final rendered text applies to subject lines: see writing an effective subject line and how to build a mailto link with subject and body. For address-level rules, the email address syntax guide covers what is valid.
Frequently asked questions
How many characters are in one text message?
One SMS holds up to 160 characters when every character is in the GSM 7-bit alphabet, or up to 70 characters when the message uses UCS-2 (Unicode).
Why does my 160-character text count as two messages?
Some characters, such as the euro sign, curly braces, square brackets, the tilde, the vertical bar, the backslash and the caret, use two units in GSM-7. Your 160 characters then need more than 160 units, so the message splits.
Why does a long SMS hold only 153 characters per part?
Each part of a longer message carries a header that tells the phone how to reassemble the parts. The header takes 6 octets, which leaves 153 seven-bit characters (or 67 UCS-2 characters) per part.
Does one emoji make the whole message Unicode?
Yes. An emoji is not in the GSM alphabet, so the entire message switches to UCS-2 with its 70 and 67 character limits.
How many segments can a concatenated SMS have?
The standard allows up to 255 parts, which is 39,015 GSM-7 characters or 17,085 UCS-2 characters. Your SMS provider may set a lower limit.


