SMS character limits:
160, 153, 70 and 67

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.

The short answer

SituationCharacters you getYou can type on HantarSMS
Plain English, fits in one SMS160156
Plain English, message is split across several153 per part302 in 2 parts, 455 in 3
Contains any non-GSM character, one SMS7066
Contains any non-GSM character, split67 per part130 in 2 parts, 197 in 3

The last column is lower because our upstream route adds a 4-character prefix to every message (explained below).

Why 160

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.

Why it drops to 153

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. Lengths below are what you type on HantarSMS; the 4-character prefix our upstream route adds is counted on top:

LengthSegmentsWhy
1561160 with the prefix — fits without a header
1572161 with the prefix: needs splitting, so both parts drop to 153
3022306 with the prefix = 153 × 2
3033307 with the prefix; 153 × 3 = 459 available

One character past 156 doubles the bill. Cutting a 157-character message by one character is the cheapest saving available in SMS.

Why one emoji costs you 90 characters

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 150-character English promo is one segment. Add one emoji and it is 151 characters of Unicode — 155 with the 4-character prefix — which at 67 per part is three segments. One character, triple the cost.

Characters that trigger Unicode without looking like it

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 likeActually isType this instead
’ curly apostropheU+2019, not GSM' straight apostrophe
“ ” curly quotesU+201C/201D" straight quotes
– en dash, — em dashU+2013 / U+2014- hyphen
… ellipsis characterU+2026... three dots
Non-breaking spaceU+00A0Normal space
Any Chinese, Tamil or Jawi textUnicode by definitionNo workaround — budget 66

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.

Brackets and symbols: one character each on our route

In the GSM standard, [ ] { } \ ~ ^ | are stored as two characters via an escape sequence, and many calculators count them double. On our route they count as one character each and do not force Unicode (we verified this against the upstream billing record: a 156-character message ending in [ was billed as one segment). Accented letters and the euro sign are different: é £ € are not plain English characters, so any one of them switches the whole message to Unicode.

The Malaysian detail that breaks calculators

Our upstream route adds a 4-character prefix to every message, and those characters come out of your 160, not the operator's: one segment holds 156 plain-English characters, or 66 if the message uses Unicode. 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.

Practical limits to write to

What this means for a campaign budget is worked through in bulk SMS cost in Malaysia.

Frequently asked questions

What is the SMS character limit?

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. On HantarSMS our upstream route adds a 4-character prefix to every message, so one segment holds 156 plain-English characters, or 66 in Unicode.

Why is my SMS limit 70 characters?

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.

Does an emoji really triple the cost?

It can. A 150-character English message is one segment. Adding one emoji makes it 151 Unicode characters — 155 with the 4-character prefix our upstream adds — 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.

How many characters is 2 SMS?

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. On HantarSMS the 4-character prefix our upstream adds comes out of that, so two segments hold 302 plain-English or 130 Unicode characters that you type.

Do spaces and line breaks count?

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 156 characters bills as two segments.

Count your own message

The calculator shows encoding, segments and cost live, including the operator prefix.