WordBench guide

SMS Character Limit: 160, or 70 With One Emoji

One SMS holds 160 characters when every character fits the 7-bit GSM-7 alphabet. A single emoji, curly apostrophe or non-Latin character switches the whole message to 16-bit UCS-2 and cuts that to 70. Longer messages are not truncated: they are split into segments of 153 characters in GSM-7 or 67 in UCS-2, and each segment is billed as a separate message.

Character counter
0
Characters
0
No spaces
0
Words
0
Sentences
0
Lines

Against platform limits

Each bar counts in the unit that platform actually uses, so the numbers differ from the plain character count on purpose.

X (Twitter)Post, free account
0 / 280weighted units
InstagramProfile bio
0 / 150characters
InstagramCaption
0 / 2,200characters
BlueskyPost
0 / 300graphemes
LinkedInPost
0 / 3,000characters
YouTubeVideo title
0 / 100characters
SMSSingle message, GSM-7
0 / 160characters
Google AdsResponsive search ad headline
0 / 30characters

As an SMS this is 0 segments in GSM-7 (0 septets, 160 left before the next one).

The same text, measured four ways

0
Graphemes
0
Code points
0
UTF-16 units
0
UTF-8 bytes

For plain English these four numbers are identical except the bytes. Add an emoji and they separate: a thumbs-up with a skin tone is one grapheme, two code points, four UTF-16 units and eight UTF-8 bytes.

Copied to clipboard

The 160-character limit is not an arbitrary product decision. An SMS was designed to fit in the spare signalling capacity of a GSM network, which left a payload of 1,120 bits. The GSM 03.38 alphabet packs each character into 7 bits, and 1,120 divided by 7 is exactly 160. Everything else about SMS length follows from that one number.

That alphabet is small: basic Latin letters, digits, ordinary punctuation, a handful of Greek capitals, and a short list of accented European characters. Nine more characters live in an extension table and cost two septets each, because the handset has to be told to shift alphabets first. Anything outside both lists cannot be sent in GSM-7 at all.

When that happens the whole message, not just the offending character, is re-encoded in UCS-2 at 16 bits per character. The same 1,120-bit payload now holds 70 characters. So a 158-character message that reads perfectly well becomes a three-segment message the moment somebody pastes in a curly apostrophe from a word processor.

Try it in the counter above

Paste a 150-character message made of plain letters, digits and straight punctuation. The counter reports GSM-7 encoding, one segment, and roughly ten septets of headroom left.

Now change one straight apostrophe to a curly one, or add a single emoji. The encoding flips to UCS-2, the limit drops from 160 to 70, and the same message becomes three segments and three times the send cost. The counter names the exact character that caused the switch.

Why does a longer text message cost more than one message?

Past the single-message limit the sender's phone or platform splits the text into a concatenated message. Each part carries a User Data Header telling the receiving handset how many parts there are and where this one belongs, so the phone can reassemble them into what looks like one long text.

That header consumes space inside the same fixed payload. In GSM-7 it costs the equivalent of seven characters, leaving 153 per segment. In UCS-2 it leaves 67. Carriers and messaging APIs bill per segment, which is why a 161-character message costs twice as much to send as a 160-character one, and why marketing teams obsess over the difference.

The arithmetic is worth internalising. In GSM-7, 160 characters is one segment, 306 is two, 459 is three. In UCS-2, 70 is one, 134 is two, 201 is three. A message that is one character over a boundary pays for a whole extra segment and gains almost nothing.

Which characters break GSM-7 encoding?

Every emoji, without exception. Curly or smart quotation marks and apostrophes, which word processors and note apps insert automatically in place of straight ones. Em dashes and en dashes. Ellipsis characters. Any Cyrillic, Greek lowercase, Arabic, Hebrew, Chinese, Japanese, Korean, Thai or other non-Latin script. Most accented letters beyond the small European set GSM-7 includes.

The most expensive of these is the curly apostrophe, precisely because nobody notices it. Typing an apostrophe on a phone keyboard usually produces the straight version, which is fine, but pasting a sentence from a document often brings the curly one, which is not. Retyping that single character can take a message from three segments back to one.

The nine extension-table characters are a milder trap. The caret, curly braces, square brackets, backslash, tilde, pipe and euro sign are all sendable in GSM-7, but each costs two septets instead of one, so a message full of brackets runs out of room sooner than its character count suggests.

How many segments is my text message?

Character counts at which an SMS crosses into another billed segment, for both encodings.

SegmentsGSM-7 charactersUCS-2 characters
11 to 1601 to 70
2161 to 30671 to 134
3307 to 459135 to 201
4460 to 612202 to 268
5613 to 765269 to 335
6766 to 918336 to 402

A single message uses the full 160 or 70. From two segments upward each part loses room to the User Data Header, leaving 153 or 67 per segment.

The GSM-7 alphabet, in full

Characters in the basic set cost one septet. The nine extension characters cost two, because they are sent as an escape plus the character. Anything not listed here forces the whole message into UCS-2.

GroupCharactersCost each
Latin lettersA to Z and a to z1 septet
Digits0 to 91 septet
Punctuation and symbolsspace ! " # % & ' ( ) * + , - . / : ; < = > ? @ _1 septet
Currency$ £ ¥ ¤ §1 septet
Accented and special lettersà ä å æ Ä Å Æ Ç è é É ì ñ Ñ ò ö Ö ø Ø ß ù ü Ü ¡ ¿1 septet
Greek capitalsΔ Φ Γ Λ Ω Π Ψ Σ Θ Ξ1 septet
Line controlline feed and carriage return1 septet
Extension table^ { } \ [ ] ~ | €2 septets

Set out in the GSM 03.38 specification. Note what is missing: straight quotes are in, curly quotes are not; the hyphen is in, the en dash and em dash are not.

Frequently asked questions

How many characters is one text message? 160 when every character is in the 7-bit GSM-7 alphabet, which covers basic Latin letters, digits and ordinary punctuation. If the message contains any character outside that alphabet, including any emoji, the whole message is encoded in 16-bit UCS-2 and one message holds only 70 characters.

How many characters is one text message?

160 when every character is in the 7-bit GSM-7 alphabet, which covers basic Latin letters, digits and ordinary punctuation. If the message contains any character outside that alphabet, including any emoji, the whole message is encoded in 16-bit UCS-2 and one message holds only 70 characters.

Why does adding an emoji reduce my SMS limit to 70?

An SMS payload is a fixed 1,120 bits. GSM-7 spends 7 bits per character, giving 160. Emoji are not in the GSM-7 alphabet, so the message must use UCS-2, which spends 16 bits per character. 1,120 divided by 16 is 70. The change applies to the entire message, not just the emoji.

What happens if my message is longer than 160 characters?

It is not cut off. The message is split into concatenated segments that the receiving handset reassembles into one text. Each segment carries a User Data Header that eats into the payload, so segments hold 153 characters in GSM-7 or 67 in UCS-2, and each is billed separately.

Do spaces count toward the SMS character limit?

Yes. A space is a normal GSM-7 character costing one septet, exactly like a letter. Line breaks also count, as one septet each. Only the extension-table characters cost more than one.

Why do smart quotes break SMS encoding?

GSM-7 contains the straight apostrophe and straight double quote, but not the curly typographic versions that word processors substitute automatically. Pasting text from a document therefore often carries a character that is invisible to the eye but forces UCS-2 and cuts the limit from 160 to 70.

Does the counter on this page tell me how many segments I will be billed for?

Yes. It detects the encoding, counts septets for GSM-7 or UTF-16 code units for UCS-2, reports the segment count and the room left before the next segment starts, and names the specific character that forced UCS-2 when one did.

Sources


Try the full tool