An SMS message body is not measured in characters. It is measured in bits. The GSM specification allocates exactly 140 octets, or 1,120 bits, to the user data field of a single short message, and every character limit you have seen is that budget divided by the bits each character consumes. Pack characters at 7 bits each and you get 160. Pack them at 16 bits each and you get 70. Add a concatenation header so the handset can reassemble a long message and the budget shrinks to 153 or 67 per segment. That single relationship explains every surprising billing result, every mangled apostrophe, and every message that split when you expected it not to.

This page is the reference: the two encodings, the segment arithmetic, the header structure, the characters that cost double, and the specifications behind all of it.

The two encodings that matter

Two character encodings account for nearly all real SMS traffic in the United States, and they are defined in 3GPP TS 23.038, the specification covering alphabets and language-specific information.

  • GSM 7-bit default alphabet, commonly written GSM-7. A 128-position table containing Latin letters, digits, common punctuation, a handful of accented characters, several Greek capitals, and currency symbols including the dollar sign, the pound sign, and the yen sign. Each character occupies 7 bits, so eight characters pack into seven octets.
  • UCS-2. A fixed 16-bit encoding, in practice handled as UTF-16 big-endian by modern devices. It covers essentially any character, at the cost of consuming more than twice the space per character.

An 8-bit data mode also exists for binary payloads such as over-the-air configuration. It yields 140 octets per message and is not relevant to normal text messaging.

Encoding selection is automatic and message-wide. If every character in your message exists in the GSM-7 table, the message is sent as GSM-7. If even one character does not, the entire message is re-encoded as UCS-2 and the limit drops from 160 to 70. There is no partial or mixed encoding.

The segment arithmetic

EncodingBits per characterSingle message limitPer segment when concatenatedHeader overhead
GSM-77160 characters153 characters6 octets plus 1 fill bit
GSM-7, 16-bit reference7160 characters152 characters7 octets
UCS-21670 characters67 characters6 octets
UCS-2, 16-bit reference1670 characters66 characters7 octets
8-bit binary8140 octets134 octets6 octets

The derivation makes the numbers memorable rather than arbitrary. The user data field holds 1,120 bits. At 7 bits per character that is 160; at 16 bits per character, 70. A concatenated message spends 6 octets, or 48 bits, on a User Data Header. For GSM-7 the header is padded with one fill bit so text starts on a septet boundary, leaving 1,071 bits, which divides evenly into 153 septets. For UCS-2 the header takes 6 of the 140 octets, leaving 134 octets, or 67 sixteen-bit characters.

For the practical billing side of this, including how carriers count and charge for multi-segment messages, see our explainer on SMS character limits and segments.

The User Data Header and concatenation

Long messages are split into segments, each a complete short message carrying a small header that tells the receiving handset how to reassemble them. The mechanism is defined in 3GPP TS 23.040, the specification for technical realization of the Short Message Service. The header sits at the start of the user data field, with a flag in the protocol data unit indicating its presence.

FieldSizePurpose
UDHL1 octetLength of the header that follows
IEI1 octetInformation Element Identifier: 0x00 for an 8-bit reference number, 0x08 for a 16-bit one
IEDL1 octetLength of the information element data
Reference number1 or 2 octetsShared identifier that groups the segments of one message
Total parts1 octetHow many segments make up the complete message
Sequence number1 octetPosition of this segment, starting at 1

Because the sequence number is a single octet, the theoretical maximum is 255 segments, though carriers and platforms impose far lower practical limits. Segments travel independently and can arrive out of order; the handset buffers and reorders them. If one segment never arrives, most handsets show the partial message or nothing, which is why long messages are less reliable than short ones.

Characters that cost two septets

GSM-7 has an extension mechanism. A small set of characters sits outside the 128-position basic table and is encoded as an escape character, value 0x1B, followed by a position in an extension table. These remain valid GSM-7, so they do not force UCS-2, but each consumes two septets instead of one.

CharacterSeptets consumedCommon source
Left brace and right brace2 eachMerge-field syntax left unrendered in a template
Left bracket and right bracket2 eachPlaceholders and annotations
Backslash2Escaped strings and file paths
Tilde2Approximation, as in a time estimate
Caret2Rare in prose, common in generated text
Vertical bar2Separators in generated or concatenated content
Euro currency symbol2International pricing
Form feed2Stray control character from a copy and paste

A message of 158 visible characters containing two sets of braces is 162 septets and therefore two segments. This is the single most common cause of a message that splits when the visible count says it should not.

Characters that force UCS-2

These are outside the GSM-7 table entirely, so a single instance re-encodes the whole message and cuts the limit to 70 characters.

  • Curly quotation marks and apostrophes. The most frequent offender, because word processors and content systems substitute them automatically for the straight ASCII versions.
  • The en dash, em dash, and horizontal ellipsis character. Same cause: automatic typographic substitution.
  • Non-breaking spaces. Invisible in every editor, and frequently pasted in from web pages.
  • Emoji and pictographs. Not in GSM-7 under any circumstance.
  • Most accented and non-Latin characters. GSM-7 includes a limited set, but most accented Latin characters, and all Chinese, Japanese, Korean, Arabic, Hebrew, Cyrillic, and Devanagari text, require UCS-2.

Emoji deserve a note. Most sit above the Basic Multilingual Plane and are represented as a surrogate pair in UTF-16, so one emoji consumes two of your 70 or 67 units. Emoji built from sequences, such as skin tone modifiers, flags, or groupings joined by zero width joiners, can consume several units each while appearing as one glyph.

3GPP TS 23.038 also defines National Language Shift Tables, added in Release 8, providing locking and single shift tables for Turkish, Spanish, and Portuguese so those languages can be sent at 7 bits per character instead of dropping to UCS-2. Support depends on both the sending platform and the handset, so test rather than assume.

SMS compared with MMS

SMS and MMS are different services sharing one user interface. SMS rides the signaling channel and is bound by the 140 octet user data field above. MMS is a separate service, standardized through 3GPP and the Open Mobile Alliance, that transfers content over a data connection using HTTP against a multimedia messaging service center. That is why it carries images, audio, video, and long text.

AttributeSMSMMS
TransportSignaling channelData connection to an MMSC
Text payload140 octets per messageLong text supported
MediaNoneImages, audio, video, vCard, slideshow
Size limitsFixed by specificationSet by each carrier, published in carrier documentation
Subject lineNoneSupported

MMS is also priced differently, and in some programs a long text sent as MMS costs less than the same text split across several SMS segments. We compare the two in SMS versus MMS differences and costs.

The specifications, by name

  • 3GPP TS 23.038. Alphabets and language-specific information. Defines the GSM 7-bit alphabet, the extension table, UCS-2 usage, the Data Coding Scheme octet, and the National Language Shift Tables.
  • 3GPP TS 23.040. Technical realization of the Short Message Service. Defines the protocol data units, the 140 octet user data limit, the User Data Header, and concatenation.
  • Unicode Standard. Defines UTF-16, surrogate pairs, and the emoji sequences that determine how many code units a given glyph consumes.

Practical rules for message authors

  1. Compose in plain text, or strip typographic substitution before sending. One curly apostrophe more than halves your limit.
  2. Count after merge fields render, not before. A template that fits at 150 characters can exceed the limit once a long name is substituted.
  3. Use a line feed rather than a carriage return and line feed pair; the latter costs two characters.
  4. Treat required disclosures as part of the budget. Rate-disclosure language, covered in what message and data rates may apply means, occupies the same 1,120 bits as everything else.
  5. Test emoji on real handsets. Rendering and code unit counts vary by platform.

Frequently Asked Questions

Why is the SMS limit 160 characters?

Because the user data field of a short message is fixed at 140 octets, which is 1,120 bits, and the GSM 7-bit default alphabet packs each character into 7 bits. Dividing 1,120 by 7 gives exactly 160. The limit is a consequence of the bit budget defined in 3GPP TS 23.040, not an arbitrary product decision.

Why does one emoji cut my message to 70 characters?

Emoji are not present in the GSM 7-bit alphabet, so including one forces the entire message into UCS-2, where each character occupies 16 bits. That reduces the budget from 160 characters to 70. Encoding is decided for the whole message, never per character, so a single emoji affects every character in the body.

What is the difference between 160 and 153 characters?

160 applies to a single standalone message that uses the full 1,120 bit budget. 153 applies to each segment of a concatenated message, because 6 octets are spent on a User Data Header carrying the reference number, total part count, and sequence number, plus one fill bit to align the text to a septet boundary. The remaining 1,071 bits hold 153 septets.

What is GSM-7?

GSM-7 is the 7-bit default alphabet defined in 3GPP TS 23.038. It contains 128 positions covering Latin letters, digits, common punctuation, several accented characters, some Greek capitals, and a few currency symbols. An additional escape mechanism provides characters such as braces and brackets at a cost of two septets each.

Which characters use two characters in an SMS?

The GSM-7 extension characters: opening and closing braces, opening and closing brackets, backslash, tilde, caret, vertical bar, the euro currency symbol, and the form feed control character. Each is encoded as an escape byte followed by the character, so each consumes two septets while displaying as one character.

What is a UDH in SMS?

The User Data Header, a small structure at the start of the user data field defined in 3GPP TS 23.040. For concatenation it carries a reference number that groups the segments, the total number of parts, and the sequence number of the current part, allowing the receiving handset to reassemble segments that may arrive out of order.

Do curly quotes break SMS messages?

They do not break delivery, but they force UCS-2 encoding, which reduces the limit from 160 characters to 70 and can multiply the number of segments billed. Curly quotes and apostrophes are inserted automatically by many word processors and content systems, so strip typographic substitution or compose in plain text before sending.

Is MMS just a longer SMS?

No. They are separate services. SMS travels over the signaling channel with a fixed 140 octet payload. MMS transfers content over a data connection to a multimedia messaging service center and supports images, audio, video, a subject line, and long text. Size limits for MMS are set by each carrier rather than by a single specification.

Message encoding handled for you

FRANSiS calculates encoding and segment counts before a message sends, so your team can see how a template will split once merge fields render. Contact us to walk through how that works for your messaging program.