Four numbers that decide what you pay. Here is where each one comes from, and which characters quietly move you from the first pair to the second.
| Situation | Characters you get |
|---|---|
| Plain English, fits in one SMS | 160 |
| Plain English, message is split across several | 153 per part |
| Contains any non-GSM character, one SMS | 70 |
| Contains any non-GSM character, split | 67 per part |
An SMS payload is 140 bytes — a limit set when the standard was designed in the 1980s around spare capacity in the signalling channel. The GSM-7 alphabet packs each character into 7 bits rather than 8, so 140 bytes × 8 ÷ 7 = 160 characters. The number is not a policy anyone chose; it falls out of the arithmetic.
A longer message is not sent as independent SMS. It is split into parts, and each part carries a 6-byte header (a UDH) telling the handset which message this belongs to and what order to reassemble in. That header eats 7 characters of GSM-7 space, leaving 153.
This produces the counter-intuitive boundary that costs people money:
| Length | Segments | Why |
|---|---|---|
| 160 | 1 | Fits without a header |
| 161 | 2 | Needs splitting, so both parts drop to 153 |
| 306 | 2 | 153 × 2 |
| 307 | 3 | 153 × 3 = 459 available |
One character past 160 doubles the bill. Cutting a 161-character message by one character is the cheapest saving available in SMS.
GSM-7 has a fixed alphabet of about 128 characters. Anything outside it forces the entire message to UCS-2 (Unicode), where each character takes 16 bits instead of 7. 140 bytes ÷ 2 = 70 characters, and 67 once split.
This applies to the whole message, not the one character. A 159-character English promo is one segment. Add one emoji and it is 160 characters of Unicode — which at 67 per part is three segments. One character, triple the cost.
Emoji are obvious. These are the ones that catch people, and they usually arrive by pasting from a word processor or a design tool:
| Looks like | Actually is | Type this instead |
|---|---|---|
| ’ curly apostrophe | U+2019, not GSM | ' straight apostrophe |
| “ ” curly quotes | U+201C/201D | " straight quotes |
| – en dash, — em dash | U+2013 / U+2014 | - hyphen |
| … ellipsis character | U+2026 | ... three dots |
| Non-breaking space | U+00A0 | Normal space |
| Any Chinese, Tamil or Jawi text | Unicode by definition | No workaround — budget 70 |
Word processors substitute the first four automatically as you type. If a message looks like plain English but your platform reports Unicode, one of these is why.
A handful are in the GSM-7 alphabet but stored as two characters via an escape sequence:
[ ] { } \ ~ ^ | and the euro sign. They do not force Unicode, but each one
consumes two of your 160.
Malaysian commercial routes prepend a short prefix to your message, and those characters come out of your 160, not the operator's. A message you measured at exactly 160 characters in a text editor bills as 2 segments.
Generic online SMS counters do not know about this, which makes them wrong at exactly the boundary where being wrong is expensive. Our segment calculator counts the prefix, so the number it shows is the number you are billed.
What this means for a campaign budget is worked through in bulk SMS cost in Malaysia.
160 characters for a single message in plain English (GSM-7 encoding). If the message is longer it is split, and each part then holds 153 because a reassembly header consumes the rest. With any non-GSM character the limit is 70, or 67 per part when split.
The message contains at least one character outside the GSM-7 alphabet, which forces the whole message to Unicode where each character takes 16 bits instead of 7. Usually an emoji, Chinese text, or a curly apostrophe pasted from a word processor.
It can. A 159-character English message is one segment. Adding one emoji makes it 160 Unicode characters, which at 67 per part is three segments. The emoji does not cost extra by itself — it re-prices every other character in the message.
306 in plain English (153 × 2), or 134 in Unicode (67 × 2). Note it is not 320: once a message is split, every part loses 7 characters to the reassembly header, including the first.
Yes, both count as characters. A line break is one character in GSM-7. Trailing spaces at the end of a message count too, and are a common reason a message that looks like exactly 160 characters bills as two segments.
The calculator shows encoding, segments and cost live, including the operator prefix.