The GSM-7 character set is the default alphabet for SMS text messages, and it is the reason a 160-character text sometimes arrives as two or three message segments. GSM-7 packs each character into 7 bits, which is why a single SMS holds exactly 160 characters. But the moment your message contains a character outside this alphabet, an emoji, a curly “smart quote,” or even the euro sign € the phone switches the entire message to UCS-2 encoding, and the limit drops to just 70 characters. Understanding this switch is the key to controlling SMS length and cost. You can check any message’s character count with our free word counter before you send it.
What GSM-7 actually is

GSM-7 (GSM 03.38) is the character encoding defined for the GSM mobile standard. It covers the basic Latin alphabet (upper and lower case), digits 0 to 9, common punctuation, and a handful of symbols, 128 characters in the base table plus an extension table for extra symbols. Because each character needs only 7 bits, 160 of them fit into the 140 bytes (1,120 bits) that a single SMS segment allows: 160 × 7 = 1,120.
The extension table holds characters like ^ { } [ ] ~ | and €. These are still GSM-7, but each one is sent as an escape sequence that consumes two character slots instead of one. So a message full of square brackets runs out of room faster than it looks.
The 160 / 153 rule for multi part messages
When a message exceeds one segment, phones split it into concatenated (multi part) SMS. Each segment then needs a small header (6 to 7 bytes) so the receiving phone can reassemble the parts in order, and that header eats into the payload. The practical limits become:
- GSM-7 single message: 160 characters per segment.
- GSM-7 concatenated: 153 characters per segment (160 − 7 used by the header).
- UCS-2 single message: 70 characters per segment.
- UCS-2 concatenated: 67 characters per segment.
This is why a 161-character plain text SMS is billed as two segments (160 + 1, or rather 153 + 8), while a 71 character message containing one emoji becomes two segments as well (67 + 4). Carriers and SMS gateways charge per segment, so the encoding switch directly affects cost.
What forces the switch to UCS-2
Any single character outside GSM-7 converts the entire message to UCS-2 (a 16 bit Unicode encoding). The usual culprits are easy to type by accident:
- Emojis every emoji forces UCS-2, and many count as two UCS-2 characters each.
- Smart quotes and apostrophes (” ” ‘ ‘), phones and word processors auto substitute these for straight quotes.
- Typographic dashes the em dash (,) and en dash (,) are not GSM-7; the plain hyphen (-) is.
- Accented characters beyond the small GSM-7 set (é è are fine; many others are not).
- Special symbols like ™, © (some gateways map these, many do not), and most non Latin scripts.
A classic real world surprise: someone writes a 150-character marketing SMS, adds one emoji at the end, and the message that fit in one segment suddenly needs three (67 + 67 + 17 UCS-2 characters). The fix is either to drop the emoji or to deliberately shorten the text under 70 characters.
Practical tips for keeping SMS short
- Use straight quotes and hyphens. Type
"and-instead of letting autocorrect insert curly quotes and em dashes. - Count extension characters as two. Brackets, braces, the caret, and the euro sign each consume two GSM-7 slots.
- Decide about emojis deliberately. One emoji can triple your segment count, worth it for engagement, but know the cost.
- Test before bulk sending. Paste the final text into a character counter, check the total, and confirm whether it stays in GSM-7.
- Remember the 153/67 boundaries. Aim for 160, 306, or 459 GSM-7 characters (1, 2, or 3 segments), landing one character over a boundary buys you a whole extra segment for almost nothing.
SMS encoding is one of those places where bits vs bytes really matters: the entire 160-character limit exists because 140 bytes × 8 bits ÷ 7 bits per character = 160. Explore the tools collection for more everyday utilities.
Worked example: one message, three different segment counts
Take a plain 200-character message, say a delivery notice with an address and a reference number, written with straight quotes and hyphens only. As pure GSM-7 it needs two segments: the first carries 153 characters and the second carries the remaining 47. Billing sees two segments, and so does your gateway invoice. You can confirm the character total before sending with the word counter paste the final text in and check the count rather than trusting your eyes.
Now add a single emoji anywhere in that same message. The text has barely changed, but the encoding has: the whole message is now UCS-2, where a concatenated segment holds only 67 characters. The same 200 characters now need three segments (67 + 67 + 66). One decorative character increased the cost of every send by half, and on a bulk campaign of ten thousand messages, that is ten thousand extra segments bought for one emoji.
A subtler version of the same trap: a 155-character price alert that mentions the euro sign ten times. Visually it fits in one segment with room to spare. But each euro sign is an extension table character that counts double, so the message really occupies 155 + 10 = 165 slots, two segments (153 + 12). Nothing “looks” wrong; only the count gives it away.
Segment limits at a glance
| Encoding | Single segment | Per segment when joined | Two segments hold | Three segments hold |
|---|---|---|---|---|
| GSM-7 | 160 characters | 153 characters | 306 characters | 459 characters |
| UCS-2 | 70 characters | 67 characters | 134 characters | 201 characters |
Read the table from the decision you are making. If a draft is 150 GSM-7 characters, you are ten characters away from a second segment, trimming a word or two is worth real money at volume. If it is 165 characters, you are already paying for two segments, so you might as well use the room up to 306 rather than agonising over a handful of characters.
Common mistakes to avoid
- Pasting text straight from a word processor. Word and Google Docs quietly replace straight quotes with curly ones and hyphens with dashes. Paste the copy into a plain text editor first, or retype the punctuation, before it goes anywhere near a sending platform.
- Counting characters instead of segments. Your bill is per segment, not per character. A message can be “short” and still split badly, always check which side of the 160/153 and 70/67 boundaries the final text lands on.
- Assuming symbols count once. The euro sign, brackets, braces, the caret and the tilde are all extension characters that cost two slots each. A template full of prices can overflow a segment without looking long.
- Testing on one handset only. Some gateways transliterate smart quotes and dashes back to GSM-7 equivalents; others pass them through and flip the encoding. The behaviour of your actual sending route is the one that counts, so send a test through it.
- Adding the emoji last. If the message was written, approved and priced as one GSM-7 segment, a late creative flourish is the most expensive character in the campaign. Decide on emojis before the copy is finalised, then write to the UCS-2 budget deliberately.
A reliable routine for bulk senders: draft the message, paste it into the character counter, scan for curly quotes, dashes and symbols that force UCS-2 or count double, then fix the text so it lands just under a segment boundary. Two minutes of checking per template is cheaper than discovering the encoding switch on the invoice.
How the receiving phone puts a long message back together
It is worth understanding what that 7 character toll per segment actually buys. When your phone splits a long text, it stamps each segment with a small user data header containing three facts: this message is one part of a longer whole, the whole has this many parts, and this segment is part number such and such. That header is the 6 to 7 bytes that shrink a joined GSM-7 segment from 160 to 153 characters, and a UCS-2 segment from 70 to 67.
On the receiving side, the phone holds the segments as they arrive and only displays the message once it can assemble them in order, which is why a long text occasionally appears a few seconds after the notification sound, and why, on congested networks, a message can very rarely show up with its parts visibly out of order or with a middle piece missing until it is delivered. The sender never chooses the split points by content: the phone simply fills one segment and continues mid word into the next, which is also why you cannot control where a recipient’s message “breaks.” What you can control is the encoding and the total count, the two things that decide how many segments exist at all. Everything else in SMS cost control is arithmetic: fewer characters, in the cheaper alphabet, filling each segment as completely as you can without spilling one character into the next.
More than English: what GSM-7 already includes
It is easy to assume GSM-7 means plain English only, but the default alphabet was designed for European mobile networks and includes more than A, Z. It covers a selection of accented Latin letters, including à, è, é, ì, ò, ù, ä, ö, ü, ñ and ç, plus the Greek capital letters, which is why a message in Greek capitals can stay in GSM-7 while the same text in lowercase Greek cannot. Whether a given accented letter survives depends on it being one of the specific characters in the table, not on it looking “close enough” to a basic letter.
For languages that need more, the GSM standard defines national language shift tables: extra character sets, agreed per language, that a phone can switch into for scripts such as Turkish or Spanish, still 7 bit, still cheaper than UCS-2, but dependent on both handsets and the network supporting the same tables. When they are not supported, the fallback is UCS-2 and the 70 character world. The practical takeaway for anyone sending messages in another language is to test with real text on the real route: paste a full sample message into a counter, look for the characters that flip the encoding, and only then decide whether to shorten the copy, accept UCS-2, or adjust the wording to characters the cheaper encoding can carry.
Frequently asked questions
Why did my 160-character SMS arrive as two messages?
Most likely one character in the message is outside GSM-7, a smart quote, em dash, or emoji. That flips the whole message to UCS-2 encoding, where the single segment limit is 70 characters, so your 160 characters needed multiple segments.
Which characters count as two in GSM-7?
The extension table characters: ^ { } [ ] ~ | and €. Each is sent with an escape code, consuming two of your 160 slots.
How many characters fit in two SMS segments?
306 characters in GSM-7 (2 × 153) or 134 characters in UCS-2 (2 × 67). Concatenated segments hold slightly less than single ones because each carries reassembly header data.
Does one emoji really change the whole message encoding?
Yes. SMS encoding is per message, not per character: a single non-GSM-7 character converts the entire message to UCS-2, dropping the limit from 160 to 70 characters per segment.
How do I keep a message at exactly one segment?
Stay within 160 GSM-7 characters (counting extension characters as two), avoid emojis, smart quotes, and em dashes, then verify the count before sending.

