How SMS length is calculated
One SMS carries 140 octets (1,120 bits) of user data. In the GSM 7-bit default alphabet each character takes 7 bits, so 140 octets hold 160 characters. In UCS-2 (the 16-bit Unicode encoding used for SMS) each character takes 2 octets, so the same space holds 70 characters.
When a message is longer than one SMS, it is sent as a concatenated message. Each part starts with a User Data Header (UDH) of 6 octets that carries a reference number, the total number of parts and the part's position, so the phone can reassemble them. That header leaves 134 octets per part: 153 GSM-7 characters or 67 UCS-2 characters.
The recipient sees one message, but operators and providers bill every part. A 161-character GSM-7 message costs two SMS, and a 71-character Arabic message also costs two.
- GSM-7: 160 characters in one SMS, 153 per part when concatenated (306 for 2 parts, 459 for 3).
- UCS-2: 70 characters in one SMS, 67 per part when concatenated (134 for 2 parts, 201 for 3).
- One non-GSM character anywhere in the text switches the entire message to UCS-2.
The GSM-7 alphabet and its extension table
The GSM 7-bit default alphabet is defined in 3GPP TS 23.038 (originally GSM 03.38). Its basic table has 128 positions: Latin letters and digits, common punctuation, and characters such as @ £ $ ¥ è é ù ì ò Ç Ø ø Å å Ä Ö Ñ Ü ä ö ñ ü à ß Æ æ É ¿ ¡ § and the Greek capitals Δ Φ Γ Λ Ω Π Ψ Σ Θ Ξ. Line feed and carriage return are also single characters.
A further ten characters live in the extension table and are reached through an escape code, so each one costs two septets: the euro sign €, the caret ^, braces { }, square brackets [ ], the tilde ~, the vertical bar |, the backslash \ and the form feed. A message with 158 letters and one € is exactly 160 septets; add one more letter and it becomes two segments.
An escape sequence must stay in one part, so a two-septet character that would straddle the 153-septet boundary moves to the next part. This counter applies that rule, which is why a part can end at 152.
TS 23.038 also defines national language shift tables (for example Turkish, Spanish, Portuguese and several Indian scripts) that keep some messages in 7-bit encoding. Support depends on the network and the handset, so most platforms, and this counter, use the default alphabet only.
Characters that silently switch your SMS to Unicode
Most unexpected 70-character messages are caused by text copied from a word processor, a CMS or a phone keyboard that inserts typographic characters automatically. They look almost identical to their GSM-7 equivalents but are different code points.
Accented letters that are not in the table, such as á í ó ú â ê ã õ and lower-case ç, also force UCS-2. Replace them only if your audience accepts unaccented spelling; for many languages, correct spelling matters more than the extra segment.
- Curly quotes and apostrophes ‘ ’ “ ” (use ' and ").
- En and em dashes – — (use -), and the ellipsis … (use ...).
- Non-breaking and thin spaces, often invisible after copy and paste (use a normal space).
- Zero-width characters and byte order marks hidden in templates (remove them).
- Emoji: most take 2 UCS-2 units, a flag or a skin-tone emoji takes 4, and a family sequence takes 8 or more.
Convert a message to GSM-7 in one click
When a message is in Unicode, the Convert to GSM-7 button rewrites it with GSM-7 characters only where that is safe: curly quotes and dashes become plain ones, invisible spaces are removed, accents GSM-7 lacks are stripped (á → a, ã → a, lower-case ç → Ç), and ligatures and symbols are spelled out (œ → oe, ™ → TM). Characters that are already GSM-7, such as é, ü, ñ, ß and €, are kept.
The tool lists every change and shows the segment count before and after, and Undo restores your original text. Arabic cannot be converted: an Arabic message always stays in Unicode at 70 characters per SMS, so shorten it or send it on WhatsApp. Emoji and other non-Latin scripts are also left as they are.
Arabic SMS: 70 characters, 67 per part
Arabic letters are not part of GSM-7, so every Arabic SMS is sent in UCS-2: 70 characters in a single message and 67 per part once it is longer. A 140-character Arabic message is three billed segments, not two, because 140 is more than 2 × 67 = 134.
Every code point counts, including spaces, Latin letters mixed into the text, Arabic-Indic digits and diacritics (tashkeel). A fully vowelled word can use twice as many units as the same word without harakat, so omit diacritics in transactional messages unless they are needed to avoid ambiguity.
For OTPs and alerts in the GCC, keep the Arabic text under 70 characters where you can, put the code early in the message, and avoid emoji. If you send the same alert in English, the English version can be more than twice as long for the same price.
From segments to cost
Your monthly SMS bill is driven by segments, not messages: segments per message × messages per month × the rate for the destination network. Trimming a campaign from 2 segments to 1 halves the cost of every send.
Check the final text with variables filled in. A customer name, an order number or a shortened link can push a template over a boundary, and names in Arabic or with accents can switch a GSM-7 template to UCS-2 for some recipients only.
- Test the longest realistic values of every placeholder.
- Shorten links and remove trailing spaces and line breaks.
- Prefer one clear call to action over long multi-part messages.
