You wrote a clean 150-character text. It fit inside the 160-character SMS limit with room to spare. You added a single smart quote — the curly your phone autocorrects into — or a arrow, or a 😊. The message still looks identical on screen. But your platform just billed you for two segments instead of one, or three instead of one, and nothing in the compose box warned you.

Full disclosure: I work for ReadySMS, so I have a stake in you understanding this. But this isn't a ReadySMS quirk — it's how the SMS protocol has worked since the 1990s, and every provider bills you the same way. The difference is whether you can see it happen. Let me show you exactly where the character budget disappears.

Two alphabets, two character budgets

Every SMS gets encoded into one of two character sets before it hits the carrier:

  • GSM-7 — the default 7-bit alphabet. Covers standard English letters, digits, basic punctuation, and a handful of extras. A single segment holds 160 characters.
  • UCS-2 — a 16-bit Unicode encoding used the moment your message contains any character GSM-7 can't represent. A single segment holds only 70 characters.

The switch is automatic and all-or-nothing. Your platform scans the whole message. If every character is GSM-7-safe, you're on the 160-character budget. If one character isn't, the entire message flips to UCS-2 and the budget for the whole thing drops to 70.

That's the trap. It's not "the emoji costs a few extra characters." It's "the emoji cuts your budget by more than half, for the entire message."

What actually forces the switch

Emojis are the obvious culprit, but they're not the common one. The characters that quietly break GSM-7 are the ones you can't see are special:

Character you typedWhat it looks likeGSM-7 safe?
' straight apostropheIt's✅ Yes
curly apostrophe (autocorrect)It's❌ No → UCS-2
" straight quotes"Sale"✅ Yes
" " curly quotes"Sale"❌ No → UCS-2
- hyphen24-hour✅ Yes
em dash / en dash24—hour❌ No → UCS-2
... three periodsWait...✅ Yes
ellipsis characterWait…❌ No → UCS-2
symbolsClick →❌ No → UCS-2
😊 any emojiThanks 😊❌ No → UCS-2

Notice the pattern: the top of that list is what you meant to type. The bottom is what your phone, Word, Google Docs, or a paste from a design doc gave you. Curly quotes and em dashes are the silent killers because they look almost identical to their safe counterparts. You will not catch them by re-reading the message.

The multipart penalty makes it worse

When a message overflows one segment, it doesn't just charge you per full segment. The protocol reserves space in each part for a header that stitches the pieces back together on the recipient's phone. So the per-segment budget shrinks for multipart messages:

  • GSM-7 multipart: 153 characters per segment (not 160)
  • UCS-2 multipart: 67 characters per segment (not 70)

We wrote a whole piece on that 160-vs-153 cliff — it's here if you want the boundary math — because it catches people who think a 165-character message is "barely two segments" when it's actually a clean two.

Stack the two effects and you get the worst case. A 175-character message written entirely in GSM-7 is 2 segments (153 + 22). Add one emoji, and now the whole 175 characters encode as UCS-2 at 67 chars per part: that's 175 ÷ 67 = 2.61, rounded up to 3 segments. One emoji took you from 2 segments to 3.

The money, worked out

Here's a 5,000-contact blast on ReadySMS Standard pricing — $0.02/segment plus the $0.0045 carrier pass-through, so $0.0245 all-in per segment.

Version A — GSM-7, one segment (150 chars, straight quotes and hyphens):

`` 5,000 contacts × 1 segment × $0.0245 = $122.50 ``

Version B — same copy, but you pasted in a curly apostrophe and an em dash (now UCS-2, 150 chars = 3 segments at 67 chars each):

`` 5,000 contacts × 3 segments × $0.0245 = $367.50 ``

Same words. Same message on the recipient's screen. $245 difference on a single send — a 3x bill — because two invisible characters flipped the encoding. Run that blast weekly and you've burned over $12,000 a year on punctuation you didn't mean to type.

This is also exactly why transparent per-segment billing matters. Because ReadySMS shows you the segment count before you send and itemizes the $0.0045 carrier pass-through as its own line rather than folding it into a rounded rate, the encoding surprise shows up on your screen instead of on your invoice three weeks later. A provider that only shows you a monthly total will never tell you an em dash tripled a campaign.

The rewrite checklist to stay in one segment

Before any bulk send, run the copy through this:

  1. Kill curly quotes. Replace with ' and " " with ". If you drafted in Google Docs or Word, this is where 90% of your accidental UCS-2 comes from. Paste into a plain-text editor first — it strips the smart punctuation automatically.
  2. Swap em/en dashes for hyphens. and become -. Or restructure so you don't need the dash at all.
  3. Turn the ellipsis character into three periods ... — same look, 3 GSM-7 chars instead of 1 UCS-2-triggering char.
  4. Drop decorative symbols. , , , all force UCS-2. Use words: "Click here" beats "Click →".
  5. Decide on emojis deliberately, not reflexively. One emoji costs you the entire GSM-7 budget. If a 😊 genuinely lifts your response rate, keep it — but know you've bought a 70-character message and write to 70, not 160. We broke down that exact tradeoff in the emoji tax post.
  6. Trim to the boundary. Once you're clean GSM-7, count characters and cut to land under 160. We watched a campaign go from 2 segments to 1 by dropping 12 characters — a flat 50% cut on send cost.
  7. Check the segment counter, every time. If your platform shows encoding and segment count live, trust it over your eyeballs. If it doesn't, that's a reason to switch.

When UCS-2 is actually the right call

Honesty check: encoding isn't a moral failing, and one segment isn't always the goal. Some cases genuinely need Unicode.

  • Non-English lists. Accented characters (á, ñ, ü) and non-Latin scripts require UCS-2. You can't GSM-7 your way out of Spanish ¿ or a Chinese-language send. Budget for the 70-char reality and write tighter.
  • Brand voice that leans on one emoji. If your list has been trained to recognize your 🔔 and it measurably lifts opens, the extra segment can be worth it — as long as you're deciding, not defaulting.

The mistake isn't using UCS-2. The mistake is paying UCS-2 prices for an all-English message because a curly quote snuck in from a paste.

The practical takeaway

The SMS character budget has two settings — 160 and 70 — and a single invisible character flips you from the generous one to the punishing one for the entire message. The characters that do it are the ones autocorrect gives you: curly quotes, em dashes, the ellipsis glyph. You will not spot them by reading. You spot them by checking the segment count or by drafting in plain text.

Run your next blast through the seven-step checklist, watch the segment counter drop, and recompute the bill. If you want to model the difference across your real volume before you send, our cost calculator does the segment math for you — paste your actual copy and it'll tell you what encoding you're on. That single check is usually worth more than any pricing negotiation.