Messaging·May 3, 2026·9 min read

SMS Character Limits: GSM-7 vs UCS-2 Complete Guide

Every SMS character rule that actually matters: 160 chars in GSM-7, 70 in UCS-2, 153 / 67 per concatenated segment, plus the encoding traps (smart quotes, emoji, accented letters) that quietly double your bill.

ShareX
160
Single SMS (GSM-7)
70
Single SMS (UCS-2)
153
Concat segment (GSM-7)
67
Concat segment (UCS-2)

Count your SMS message length and segments instantly

Free real-time SMS Character Counter with GSM-7 / UCS-2 detection, segment count, and per-segment character usage built in.

Open Counter

What's the SMS Character Limit?

A single SMS is 160 characters when encoded in GSM-7, or 70 characters when encoded in UCS-2. Which encoding the carrier picks is decided automatically by the content of the message: if every character is in the GSM-7 default alphabet, you get the full 160. If even one character falls outside it, the whole message is re-encoded as UCS-2 and the limit drops to 70.

Once you go past 160 / 70, the message is broken into concatenated segments. Each segment carries a 6-byte header to let the receiving phone reassemble the message, so multi-segment SMS uses only 153 chars (GSM-7) or 67 chars (UCS-2) per segment. Carriers and SMS APIs bill per segment, not per message, which is why a single emoji in a 200-character send can quietly turn a 1-segment message into a 4-segment one.

ScenarioLimit
Single SMS, GSM-7160 chars
Single SMS, UCS-270 chars
Concat segment, GSM-7153 chars
Concat segment, UCS-267 chars
Max segments (most carriers)Up to 6-10
GSM-7 extension charsCounts as 2
Emoji2 UCS-2 units each
iMessage / RCS / WhatsApp20,000+ chars

GSM-7 Encoding: The 160-Character Standard

GSM-7 is the default SMS encoding defined in the GSM 03.38 standard. It packs 7 bits per character, which is how 160 characters fit into the 1,120-bit (140-byte) SMS payload. The alphabet has 128 base characters plus a 10-character extension table. Anything outside those 138 characters forces a switch to UCS-2.

The base alphabet covers the unaccented Latin letters (A-Z, a-z), digits 0-9, common punctuation, the space, line feed, carriage return, plus a small set of European accented letters (such as à, è, ì, ò, ù, é, ñ, Ñ, Ç, ä, ö, ü, Ä, Ö, Ü, ß, å, Å, Æ, æ), the Greek capitals used in scientific notation (Δ, Φ, Γ, Λ, Ω, Π, Ψ, Σ, Θ, Ξ), and a few currency / symbol characters (£, ¤, ¥, §, ¿, ¡).

GSM-7 extension characters (count as 2 chars each)

These 10 characters are technically GSM-7, but they live in an extension table reached via an escape byte. Each one counts as 2 characters, not 1.

  • { and } - curly braces
  • [ and ] - square brackets
  • | - pipe
  • \ - backslash
  • ~ - tilde
  • ^ - caret
  • EUR - euro sign
  • Form feed

A 160-character message containing one euro sign actually needs 161 character slots and overflows into a 2-segment send.

The practical rule: if your message reads like plain English, French, German, Spanish, or Portuguese with no emoji, no smart quotes, and no fancy dashes, you are almost certainly in GSM-7 and can use all 160 characters per segment.

UCS-2 Encoding: When You're Forced to 70 Characters

UCS-2 is a 16-bit (2-byte) Unicode encoding. The same 140-byte SMS payload fits 70 UCS-2 code units per segment, or 67 once you concatenate. Carriers switch to UCS-2 the moment a single character in your message falls outside GSM-7. There is no partial conversion. One character flips the entire send.

The most common UCS-2 triggers are characters most senders never think about: the curly quotes Word and macOS substitute for straight ones, the em dash and en dash, the ellipsis character, every emoji, and any non-Latin script (Cyrillic, Greek lowercase, Arabic, Hebrew, Thai, CJK).

The hidden trap with emoji

Most emoji are encoded as surrogate pairs in UCS-2, meaning each emoji takes 2 of your 70 characters. Skin-tone variants and combined emoji (family, flag, profession) can take 4 or more. A single waving-hand emoji at the start of a 70-character message will push you into a second segment.

Concatenated SMS: Why Segments Are 153 / 67 Chars

When a message exceeds the single-SMS limit, it is split into segments and each segment is sent as a separate SMS over the air. To let the recipient's phone reassemble them in the right order, each segment carries a User Data Header (UDH)with a reference number, the total segment count, and that segment's position.

The UDH is 6 bytes long. In GSM-7 that's the equivalent of 7 characters of payload (because 6 bytes = 48 bits and you also lose alignment), reducing the per-segment capacity from 160 to 153 chars. In UCS-2 the same 6 bytes is 3 UCS-2 code units, dropping the limit from 70 to 67 chars.

Quick segment math

  • 200 chars, GSM-7 only: 200 > 160, so concat. ceil(200 / 153) = 2 segments
  • 71 chars, includes emoji: forced to UCS-2, 71 > 70, concat. ceil(71 / 67) = 2 segments
  • 320 chars, plain ASCII: ceil(320 / 153) = 3 segments
  • 70 chars exactly, with one curly quote: 70 chars but UCS-2 single-SMS allows 70, so 1 segment
  • 71 chars, plain ASCII: 71 > 160 is false, so single GSM-7 segment, 1 segment

The Real Cost of Sending Multi-Segment SMS

Almost every commercial SMS API bills per segment, not per message. The pricing math is simple: total cost = segments per message * recipients * per-segment rate. Where it gets expensive is the encoding trap. A campaign written with smart quotes silently doubles its segment count and silently doubles its bill.

Provider / RoutePer Segment
Twilio US (long code, outbound)$0.0079
Twilio US (toll-free, outbound)$0.0079 + fees
Twilio international$0.05 - $0.50+
AT&T / Verizon to consumerBundled
Short code (US)$0.01 - $0.04
WhatsApp / iMessage / RCSFree / data only

At Twilio US rates, a 200-char promo to 100,000 recipients in pure GSM-7 is 2 segments * 100,000 * $0.0079 = $1,580. The same copy with two smart quotes flips to UCS-2, becomes ceil(200 / 67) = 3 segments, and costs $2,370. Same message, $790 difference, no improvement to the recipient experience.

Common Characters That Force UCS-2

These are the characters that quietly turn a 1-segment send into a 2- or 3-segment send. Most are pasted in by accident from word processors, email clients, or design tools.

Smart quotes (curly quotes)

Word, Pages, and macOS auto-replace straight ' and " with curly versions (‘ ’ “ ”). All four force UCS-2. Always paste SMS copy through a plain text step before sending.

Em dash and en dash

The em dash (—) and en dash (–) both force UCS-2. Use an ASCII hyphen - with spaces around it, or break the sentence into two.

Ellipsis character

The single-character ellipsis (…) is UCS-2. Three ASCII dots ... are GSM-7 and visually identical.

All emoji

Every emoji forces UCS-2 and most cost 2 of your 70 chars. Skin tones and combined emoji can cost 4 or more. Save them for messages where you have segment budget to spare.

Non-Latin scripts

Cyrillic, Greek lowercase, Arabic, Hebrew, Thai, Devanagari, Chinese, Japanese, Korean - all UCS-2. If you send to non-Latin markets, plan around the 67-char-per-segment limit from the start.

Accented letters outside GSM-7

Most common European accented letters are in GSM-7, but plenty are not (such as Ş, Č, Ł, ě, ø in some forms). When in doubt, run the copy through a real GSM-7 detector.

A2P 10DLC: Business SMS Rules

A2P 10DLC (Application-to-Person, 10-Digit Long Code) is the US framework that lets businesses send SMS from a regular 10-digit phone number rather than a short code. The character rules are the same 160 / 70 / 153 / 67 - the difference is compliance, throughput, and price.

Senders register their brand and campaigns with The Campaign Registry. Carriers (AT&T, T-Mobile, Verizon) assign a trust score that controls how many SMS per second per number you can send and the per-segment surcharge you pay on top of the base rate. Higher trust score = higher throughput and lower fees.

A2P 10DLC quick rules

  • Required for all US business / marketing SMS over a 10-digit number
  • Brand registration takes 1-3 business days; campaign approval 1-2 weeks
  • Carrier surcharges typically $0.0025 - $0.005 per segment on top of provider rates
  • Throughput from 0.25 to 100+ messages per second per number, based on trust score
  • Same 160 / 70 / 153 / 67 character rules apply - encoding still matters

iMessage / RCS / WhatsApp: When Limits Don't Apply

The 160 / 70 limits only exist because SMS rides the GSM control channel, with its 140-byte payload constraint. The moment a message moves to a data-based protocol, those limits go away.

  • iMessage: Apple's service has a soft limit around 20,000 characters. No GSM-7 / UCS-2 distinction, no segment billing. Falls back to SMS only when the recipient is on Android, offline, or has iMessage disabled.
  • RCS (Rich Communication Services): The GSMA-backed successor to SMS. No fixed character limit (typically 8,000 - 20,000 depending on carrier). Supports rich media, read receipts, typing indicators. Now widely supported across Android and iOS 18+.
  • WhatsApp: 65,536 characters per message, no segmentation, no encoding rules. WhatsApp Business API uses template approval and per-conversation pricing rather than per-segment.
  • Telegram, Signal, Messenger: All effectively uncapped for normal use (4,000 - 20,000+ chars per message).

How to Reduce SMS Cost: Practical Tips

Use plain ASCII

Strip smart quotes, fancy dashes, and the ellipsis character before sending. A pre-send pass through a plain-text editor (or a single .replace() call) often saves a segment per message.

Skip emoji unless they earn a click

Every emoji forces UCS-2 and costs at least 2 chars. If your message is already over 70 chars, an emoji adds a whole segment. Use them when they meaningfully lift open / click rate, not as decoration.

Keep promotional SMS under 160 chars

The single best cost optimization is staying in 1 GSM-7 segment. Tighten copy until you hit 160 or under. If you need 200 chars, ask whether the extra 40 are pulling their weight.

Shorten links

A bare https URL with UTM parameters can eat 70+ characters by itself. Use a branded link shortener; you save chars and you get click tracking for free.

Count before you send

Run every campaign through a counter that detects the encoding and shows segments, not just chars. The right time to find a stray smart quote is before 100,000 sends, not after.

Count your SMS message length and segments instantly

Real-time SMS Character Counter with GSM-7 / UCS-2 detection, segment count, per-segment usage, and a list of which characters in your draft are forcing UCS-2.

Open SMS Character Counter

Frequently Asked Questions

Frequently Asked Questions

A single SMS holds 160 characters when encoded in GSM-7, the default 7-bit alphabet used for plain Latin text. If your message includes any character outside that alphabet (most emoji, smart quotes, accented letters, Cyrillic, CJK, and so on), the carrier switches to UCS-2 (16-bit Unicode) and the single-segment limit drops to 70 characters.

Once you exceed 160 GSM-7 characters or 70 UCS-2 characters, the message is broken into concatenated segments. Each segment carries a 6-byte User Data Header (UDH) so the recipient device can stitch the parts back together, which is why concatenated segments are 153 GSM-7 chars or 67 UCS-2 chars rather than the full 160 / 70.

Visually they look like one character, but every emoji forces the entire message into UCS-2 encoding. Most emoji also count as 2 UCS-2 code units (a surrogate pair), so a single emoji can consume 4 of your 70 characters. Adding one emoji to a 100-character GSM message can flip a 1-segment send into a 2-segment send.

GSM-7 is a 7-bit encoding with about 128 base characters plus 10 extension characters, optimised for plain Latin SMS. UCS-2 is the 16-bit Unicode encoding used whenever a message contains any character outside the GSM-7 alphabet. GSM-7 fits 160 chars per segment; UCS-2 fits 70.

Almost every SMS API and carrier bills per segment, not per message. A 320-character GSM message is 3 segments (153 + 153 + 14) and is billed as 3. A 71-character message with one emoji is also 2 segments because the emoji forces UCS-2 and pushes you past 70. Twilio US outbound is around $0.0079 per segment; international rates can run from $0.05 to over $0.50 per segment.

iMessage, RCS, and WhatsApp are not SMS. They run over data, not the 160 / 70 SMS pipe, and have practical limits in the tens of thousands of characters (iMessage is roughly 20,000). The GSM-7 / UCS-2 rules only apply when a message falls back to SMS, which happens when the recipient is offline, on Android (for iMessage), or out of data.

Any emoji, curly / smart quotes (the ones Word and macOS auto-substitute), the em dash and en dash, the ellipsis character, accented letters outside the GSM extension table, and any Cyrillic, Greek, Arabic, Hebrew, or CJK character. Even one of these in a 200-character message drops the per-segment limit to 67 and can double your cost.

Not over native SMS. The 160 / 70 limits are baked into the GSM standard. If you need to send long content, your options are: (1) accept multi-segment billing, (2) link out to a hosted page, or (3) move to a data-based channel like iMessage, RCS, or WhatsApp Business, which have no practical character limit.

ShareX