The two SMS encodings that control your character limit
Most people assume an SMS holds 160 characters. That's true — but only for messages that use GSM-7 encoding. GSM-7 is the character set that covers standard Latin letters, digits, punctuation, and a handful of common symbols. When every character in your message belongs to this set, the 160-character limit applies and a single message costs exactly one SMS credit.
The moment your message contains a character outside GSM-7 — most commonly an emoji, a curly quotation mark, or a letter with an uncommon accent — the entire message is automatically re-encoded in Unicode (UCS-2). Unicode supports virtually every character humans have ever written, but it uses more data per character. The consequence is immediate: your per-segment limit drops from 160 characters to 70. A message you believed was comfortably under the limit can suddenly become two or three paid segments.
PostTruncate's SMS character counter detects the encoding of your message in real time, displays whether you're in GSM-7 or Unicode mode, and shows the current segment count so you always know exactly what you're sending — and what it will cost.
The emoji trap: one character, half the limit
This is the most common and most expensive SMS mistake. You draft a professional message, add a thumbs-up emoji at the end as an afterthought, and instantly transform a single-segment message into a two-segment message — doubling your SMS cost for every recipient.
Every emoji forces the entire message into Unicode mode, not just the part after the emoji. A 155-character message with one emoji at position 156 doesn't cost one SMS — it costs three (155 characters ÷ 67 Unicode multipart characters per segment). The same applies to curly quotes (" "), em dashes (—), and any character not in the GSM-7 alphabet.
PostTruncate flags the exact character that triggered Unicode mode, so you can decide whether to remove it or accept the additional segments with full awareness of the cost.
GSM extended characters: the double-cost symbols
Within GSM-7, there is a small set of characters that occupy the extended character table: € [ ] { } \ | ~ and the caret ^. Each of these counts as two characters in your SMS budget, not one. A message containing four euro signs has effectively used 8 characters from the GSM-7 limit, not 4.
This surprises developers and marketers equally. A promotional message like "Save €10 on your next order [terms apply]" uses 48 visible characters but consumes 52 GSM-7 character slots — the €, [, and ] each cost 2. PostTruncate counts extended characters at their true two-slot weight, so the number you see is the number that matters for billing.
FAQs
How many characters fit in one SMS?
160 characters in standard GSM-7 encoding. Add a single emoji or other non-GSM character and the whole message switches to Unicode, which holds only 70 characters per segment.
Why did my message split into two?
When your text exceeds one segment, it is sent as multiple parts with a small header, dropping the usable space to 153 characters per part in GSM-7 (or 67 in Unicode). The counter above shows the split point live.
Which characters force Unicode mode?
Emojis, most non-Latin scripts, and curly "smart" quotes. A few GSM "extended" characters like €, {, }, [, ], and | stay in GSM-7 but count as two characters each.
Do spaces and line breaks count in an SMS?
Yes — every space and line break is one character (or two for an extended-table character), and they count toward the per-segment limit exactly like letters do.
Last updated: May 15, 2026