GSM-7 vs UCS-2

One curly apostrophe can triple an SMS bill. This page shows how the two encodings work, which characters force UCS-2, and how to stay on GSM-7. Paste a message below to test it.

0 / 160 septetsSingle segment

Auto stays on GSM-7 until a character falls outside it. GSM-7 is 160 characters, then 153. UCS-2 is 70, then 67.

Segments

0

GSM-7 · 160 left in this segment

Characters
0
Size
0 bytes
110,000
Estimated cost$0.0000

Cost

Provider

Number type

Current rate$0.0083 / SMS

Twilio’s listed rate leaves out carrier fees. A2P registration, toll-free verification, and pass-through charges can add more. Carrier fees

0 × $0.0083$0.0000

Export

Segmentation

Segments appear as you type

Hex

Hex appears as you type

The 30-second version

GSM-7 (cheap)

  • 160 chars per segment
  • 153 chars per segment in multi-part
  • 7 bits per character
  • Basic Latin letters, digits, common punctuation, and 9 extended characters
  • The default for English-language SMS

UCS-2 (expensive)

  • 70 chars per segment
  • 67 chars per segment in multi-part
  • 16 bits per character (2 bytes)
  • Every Unicode BMP character — emojis, accents, non-Latin
  • Triggered by a single non-GSM-7 character anywhere in the message

The cost of one bad character

Say your appointment-reminder template is 150 characters of plain text. In GSM-7, that's 1 segment → $0.0083 per send at Twilio US long-code rates.

Now your marketing manager copies the template from Google Docs and the apostrophe in "You're" gets pasted as a curly quote (’ = U+2019). The message is now UCS-2. 150 characters / 67 per segment = 3 segments → $0.0249 per send.

If you send 100,000 reminders per month: the curly quote costs you an extra $1,660 every month. And nobody on the team will ever notice — the message looks identical.

The complete GSM-7 alphabet

Any character outside this list will force your message to UCS-2. The extended set (bottom row) counts as 2 septets per character — so a single € uses up 2 of your 160 characters.

Basic GSM-7
@ £ $ ¥ è é ù ì ò Ç \n Ø ø \r Å å Δ _ Φ Γ Λ Ω Π Ψ Σ Θ Ξ Æ æ ß É ! " # ¤ % & ' ( ) * + , - . / 0-9 : ; < = > ? ¡ A-Z Ä Ö Ñ Ü § ¿ a-z ä ö ñ ü à (space)
Extended, 2 septets each
^ { } \ [ ~ ] | €

Top 10 hidden UCS-2 triggers

CharacterNameCode pointSafe GSM-7 swap
’Right single curly quoteU+2019'
‘Left single curly quoteU+2018'
“Left double curly quoteU+201C"
”Right double curly quoteU+201D"
—Em dashU+2014- or --
–En dashU+2013-
…Horizontal ellipsisU+2026...
´Acute accentU+00B4'
→Right arrowU+2192->
🎉Any emojiU+1F300+No GSM-7 equivalent

How to keep your messages in GSM-7

  1. Always type SMS bodies in a plain text editor (VS Code, TextEdit in plain mode, Sublime). Never compose in Word, Pages, Google Docs, or Notion — they auto-replace straight quotes with curly ones.
  2. Turn on the Smart Encoding toggle on this page. It auto-replaces the 11 most common smart-punctuation offenders before counting.
  3. In your CMS or template engine, run every saved template through a normaliser: replace U+2018, U+2019 → ', U+201C, U+201D → ", U+2013, U+2014 → -, U+2026 → ....
  4. Avoid emojis in transactional SMS — they always force UCS-2 and they often render as a placeholder box on older phones anyway.
  5. For marketing where emojis matter, ship via iMessage / RCS / MMS instead — there's no segmentation cost.

Skip the encoding limit

Blooio sends iMessage at one rate per message. Emoji and length do not change the segment count, because there isn’t one.

FAQ

What is GSM-7 encoding?

GSM-7 is the default 7-bit alphabet used by the SMS protocol. It packs 8 characters into every 7 bytes, which is why a single 140-byte SMS segment can hold 160 GSM-7 characters. The alphabet (3GPP TS 23.038) covers basic Latin letters, numbers, common punctuation, and a small extended set: € [ ] { } ~ ^ | \.

What is UCS-2 encoding?

UCS-2 is a 16-bit Unicode encoding that supports every character in the Basic Multilingual Plane — emojis, accented letters outside the GSM-7 set, Chinese, Arabic, Cyrillic, Hebrew, smart quotes, em dashes, and so on. At 16 bits per character, a 140-byte SMS segment only holds 70 UCS-2 characters.

Which characters force UCS-2?

Any single character outside the GSM-7 basic + extended alphabet. The most common offenders: emojis (🎉, 😂), smart/curly quotes (', ', ", "), em and en dashes (—, –), ellipses (…), acute accents (´), and any non-Latin script. One offending character flips the entire message — there is no partial UCS-2 mode.

How much more does UCS-2 cost?

Per segment, the same — but UCS-2 fits roughly 44% as many characters per segment, so the same message costs 2× to 4× more. A 150-character message that fit in 1 GSM-7 segment becomes 3 UCS-2 segments (70 + 70 + 10 chars). At Twilio's US long-code rate of $0.0083/segment, that's $0.0249 instead of $0.0083 — a 3× cost overrun on every send.

Can I force GSM-7 encoding?

Not really — the carrier picks the encoding based on the characters in your body. What you can do is sanitize your message before sending: replace curly quotes with straight quotes, em dashes with hyphens, ellipses with three dots, and avoid emojis. The Smart Encoding toggle on this page automates the most common replacements.

Does iMessage have the same GSM-7/UCS-2 issue?

No. iMessage uses Apple's Push Notification network, not the SMS protocol — there are no segments and no encoding limits. You can send emojis, long messages, images, and attachments without cost overruns. The blue-bubble iMessage delivery is also significantly higher engagement than green-bubble SMS.

Related tools