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.
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.
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:
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.
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:
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.
" and - instead of letting autocorrect insert curly quotes and em dashes.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.
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.
| 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.
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.
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.
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.
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.
The extension table characters: ^ { } [ ] ~ | and €. Each is sent with an escape code, consuming two of your 160 slots.
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.
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.
Stay within 160 GSM-7 characters (counting extension characters as two), avoid emojis, smart quotes, and em dashes, then verify the count before sending.