SMS Character Counter
Count SMS message characters with GSM-7 vs UCS-2 encoding awareness. See exact segment counts, cost estimates, and which character forced Unicode encoding.
1 SMS
160 chars left in this segment
What's the Difference Between GSM-7 and UCS-2?
SMS was designed in the 1980s with a 140-byte payload budget per message. To squeeze as much text as possible into that budget, carriers default to GSM-7, a 7-bit alphabet that packs 8 characters into every 7 bytes. That math is why a single SMS holds 160 characters on GSM-7.
The catch: GSM-7 only covers basic Latin letters, digits, and a handful of punctuation marks. Anything outside that small alphabet (emoji, curly quotes, accented letters beyond the basic set, Cyrillic, Greek, Arabic, CJK) forces the entire message into UCS-2, a 16-bit Unicode encoding. Each character now takes 2 bytes instead of 7 bits, so the same 140-byte payload only holds 70 characters.
The encoding decision is all-or-nothing per message. One stray smart quote in an otherwise plain-Latin message will halve your budget for the entire message, not just for that character. The counter above shows you which exact character flipped the encoding so you can swap it for a GSM-7 equivalent (for example, a straight apostrophe instead of a curly one).
Why Concatenated SMS Uses 153 / 67 Characters Per Segment
When your message exceeds a single segment, carriers split it into multiple parts and add a User Data Header (UDH) to each segment. The UDH tells the receiving phone how to stitch the parts back together (which message this is part of, what the total count is, and which sequence number this segment occupies).
That header costs 6 bytes out of the 140-byte payload, leaving 134 bytes for user text. In GSM-7 (7 bits per character), 134 bytes hold 153 characters. In UCS-2 (16 bits per character), 134 bytes hold 67 characters.
This is why writing a 161-character GSM-7 message (only 1 over the single-segment limit) costs you 2 segments of 153 characters each. The same applies on the UCS-2 side: 71 UCS-2 characters costs 2 segments of 67 each. The counter above shows segment count in real time so you can trim a few characters and drop a segment when it matters.
How Much Does an SMS Cost?
SMS is billed per segment, not per message. The exact rate depends on the carrier, the destination country, and whether the route is consumer (P2P) or business (A2P).
- Twilio US A2P 10DLC: roughly $0.0079 per outbound segment, plus carrier surcharges (~$0.005 per segment) and a small inbound fee.
- Twilio toll-free / short codes: $0.0075 to $0.01 per segment, with monthly leasing fees on top.
- International: rates vary from $0.02 to $0.20+ per segment depending on the destination. A 4-segment message to some markets can easily cost $0.50.
- Consumer SMS (your phone plan): usually unlimited domestic, but international SMS may bill $0.25 to $0.50 per segment.
- App-based messages (iMessage, WhatsApp, Signal, RCS): free over data. They do not use SMS segments at all.
For a marketing blast at 100,000 recipients, dropping from 2 segments to 1 segment saves roughly $790 on Twilio US pricing. That is why encoding awareness matters: a single curly quote can double the bill on a campaign.
Common Characters That Force UCS-2
These characters are the usual suspects. Most are auto-inserted by iOS, macOS, Word, or Google Docs without you noticing.
- Curly (smart) quotes:
‘ ’ “ ”instead of straight' ". iOS auto-replaces them by default. - Em dash and en dash: the long horizontal punctuation marks. Use a hyphen
-or two hyphens instead. - Ellipsis as a single glyph: the
…character. Use three periods...instead. - Most emoji: any emoji forces UCS-2, and many emoji count as 2 UCS-2 characters because of surrogate pairs.
- Accented characters beyond the GSM-7 subset: GSM-7 covers a small set (such as à, é, ö, ñ), but characters like š, ž, ć, ł force UCS-2.
- Non-Latin scripts: Cyrillic, Greek, Arabic, Hebrew, Thai, Chinese, Japanese, Korean. All force UCS-2 immediately.
- GSM-7 extension characters (counted as 2):
€ [ ] { } \ | ~ ^. They stay in GSM-7 but each consumes 2 character slots.
Reference Table: SMS Character Limits Across Use Cases
| Use Case | GSM-7 Limit | UCS-2 Limit | Notes |
|---|---|---|---|
| Single SMS | 160 | 70 | One segment, 140-byte payload |
| Concatenated SMS (per segment) | 153 | 67 | Each part carries a 6-byte UDH |
| Twilio long code (A2P) | 160 / 153 | 70 / 67 | Billed per segment, ~$0.0079 + carrier fees |
| A2P 10DLC (US business) | 160 / 153 | 70 / 67 | Carrier-vetted business messaging |
| Toll-free SMS (US) | 160 / 153 | 70 / 67 | Higher throughput, similar limits |
| Short code (US 5-6 digit) | 160 / 153 | 70 / 67 | Premium throughput, monthly lease |
| UK premium SMS (5-digit) | 160 / 153 | 70 / 67 | Billing-grade carrier route |
| Long SMS (up to 6 segments) | 918 | 402 | 6 x 153 GSM or 6 x 67 UCS-2 |
| Maximum concatenated (255 segs) | 39,015 | 17,085 | Theoretical spec ceiling, rarely supported end-to-end |
A single SMS message can hold 160 characters when encoded in GSM-7 (the legacy 7-bit alphabet used by carriers worldwide). If the message contains any character outside the GSM-7 set, the entire message is re-encoded in UCS-2 (16-bit Unicode) and the limit drops to 70 characters per single segment.
GSM-7 is the default 7-bit character encoding used by SMS networks. It packs 8 characters into every 7 bytes, which is why a single SMS fits 160 characters in 140 bytes. The alphabet covers basic Latin letters, digits, common punctuation, and a small extension table (which counts as 2 characters each, like the Euro sign or curly braces).
UCS-2 is a 16-bit Unicode encoding used when an SMS contains any character outside GSM-7 (such as emoji, curly quotes, em dashes, or non-Latin scripts like Cyrillic, Arabic, or Chinese). Because each character takes 16 bits instead of 7, the per-segment limit drops from 160 to 70 characters.
Once your message exceeds the single-segment limit (160 GSM-7 or 70 UCS-2), carriers split it into concatenated parts. Each part carries a 6-byte User Data Header (UDH) so the receiving phone can stitch them back together. That UDH overhead reduces the per-segment user payload to 153 characters (GSM-7) or 67 characters (UCS-2).
Visually yes, but emoji always force the entire message into UCS-2 encoding, which means the per-segment limit drops to 70 characters. Many emoji are also encoded as surrogate pairs (2 UCS-2 code units), so a single emoji can count as 2 characters toward the limit.
No. iMessage, WhatsApp, Signal, RCS, and other internet-based messengers do not use SMS encoding or segments at all. They send messages over data, with no 160 / 70 character cap and no per-segment carrier billing. SMS limits only apply when the message actually traverses the cellular SMS network (the green bubble on iPhone, for example).
SMS is billed per segment, not per message. A 200-character GSM-7 message is billed as 2 segments. A 200-character message containing one emoji is billed as 3 segments (because UCS-2 encoding reduces the per-segment limit to 67). Twilio charges roughly $0.0079 per segment for US A2P traffic; international rates vary widely and can exceed $0.05 per segment.
Any character outside the GSM-7 alphabet forces UCS-2. The most common culprits are curly quotes (smart quotes auto-inserted by iOS, Word, or Google Docs), em dashes, ellipsis, most emoji, accented letters beyond the GSM-7 subset, and any non-Latin script (Cyrillic, Greek, Arabic, Hebrew, CJK). The counter above flags the exact offending character so you can replace it.
Related Guides
SMS Character Limits: GSM-7 vs UCS-2 Complete Guide
Every SMS encoding limit explained - GSM-7, UCS-2, segments, UDH overhead, and per-segment pricing math.
Social MediaTwitter (X) Character Limit Guide
Every character limit on Twitter/X explained - tweets, DMs, bios, and more.
Social MediaLinkedIn Character Limits: Complete 2026 Guide
Every LinkedIn limit explained - posts, headlines, About, connection requests, InMail, comments, and more.