How to use the sms character counter
- Type or paste your text into the Message box. The counter updates as you type.
- Read the Encoding row. GSM-7 is the cheap 7-bit alphabet, UCS-2 is used as soon as one character falls outside it.
- Check Segments and Remaining in this segment to see what you pay for and how many units you can add.
- If the tool lists characters under Forces UCS-2, replace them to get back to GSM-7 and shorter bills.
How the SMS length calculator counts
An SMS carries 140 bytes of payload. With the default GSM 03.38 alphabet each character takes 7 bits, which packs 160 characters into those 140 bytes. If the text contains any character outside that alphabet, the whole message switches to UCS-2, where every character takes 16 bits and only 70 fit in one message.
Longer texts are split into parts that each carry a 6-byte concatenation header. That header costs space, so the per-part limits drop to 153 for GSM-7 and 67 for UCS-2. A message of 161 GSM-7 characters is therefore 2 segments, not 1: the first holds 153, the second holds the remaining 8, and 145 more units fit before a third part is needed.
GSM-7 and UCS-2 limits at a glance
| Encoding | Single message | Each part when split | Bits per character |
|---|---|---|---|
| GSM-7 | 160 | 153 | 7 |
| UCS-2 | 70 | 67 | 16 |
| Parts | GSM-7 characters | UCS-2 characters |
|---|---|---|
| 1 | 160 | 70 |
| 2 | 306 | 134 |
| 3 | 459 | 201 |
| 4 | 612 | 268 |
Extension characters count as two
The GSM alphabet has a second table reached with an escape code. Ten characters live there, and each one takes two units: ^ { } \ [ ] ~ |, the euro sign and the form feed. A message with five curly braces and 150 letters is 160 units long and still fits one segment, but 156 letters plus five braces is 166 units and becomes two.
When a split falls inside such a pair, the escape code and its character are kept together, so the pair moves to the next part and the previous part ends a unit early. The counter applies that rule when it counts segments.
Characters that quietly force UCS-2
Most unexpected UCS-2 switches come from text that looks normal. Smart quotes from a word processor, the en dash, the ellipsis character, accented letters missing from GSM, non-breaking spaces and every emoji all push the message out of GSM-7. Letters like é, è, ü and ñ are in the alphabet and are safe, while á, í, ó and a lowercase ç are not.
The row called Forces UCS-2 lists the offending characters, so you can swap straight quotes for curly ones, replace an emoji with a word or use plain ASCII punctuation. Emoji outside the basic plane count as two UTF-16 units each in UCS-2, so one emoji costs the space of two characters.
Keeping messages inside one segment
Providers bill per segment, so trimming a text from 165 to 160 characters can cut the bill in half. Practical habits: avoid emoji in transactional messages, write URLs without trailing parameters you do not need, and put the key information first so that a trimmed preview still works. If you build the text in code, compute the length with the same rules before sending rather than trusting String.length, which counts an emoji as 2 and an extension character as 1.
For other platforms with their own limits see the Twitter character counter, or use the general character counter for plain totals.
Worked examples
| Example | Input | Result |
|---|---|---|
| Plain GSM-7 message | Message: Your verification code is 482913. It expires in 10 minutes. Reply STOP to opt out. | Characters: 82; Encoding: GSM-7; Length (7-bit units): 82; Segments: 1; Limit per segment: 160 (153 if split); Remaining in this segment: 78 |
| Euro sign uses two units | Message: Total due: €45.00 [paid] {ref 7} | Characters: 32; Encoding: GSM-7; Length (7-bit units): 37; Segments: 1; Limit per segment: 160 (153 if split); Remaining in this segment: 123; Extension characters: 5 |
| Emoji forces UCS-2 | Message: Your order has shipped 📦 Track it in the app. | Characters: 45; Encoding: UCS-2; Length (UTF-16 units): 46; Segments: 1; Limit per segment: 70 (67 if split); Remaining in this segment: 24; Forces UCS-2: 📦 |
| Two segments of GSM-7 | Message: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | Characters: 200; Encoding: GSM-7; Length (7-bit units): 200; Segments: 2; Limit per segment: 153; Remaining in this segment: 106 |
FAQ
How many characters does the sms character counter allow in one SMS?
The limit is 160 characters in GSM-7, or 70 if any character needs UCS-2. Once a message is split, each part holds 153 or 67.
Why does one emoji change my SMS length so much?
An emoji is not in the GSM alphabet, so the entire message is sent as UCS-2 with 16 bits per character. The 160 limit becomes 70 and the emoji itself counts as 2 units.
Is this a character counter SMS tool for any carrier?
It follows the standard GSM 03.38 alphabet and the 3GPP concatenation rules that carriers use. Some providers add their own prefix or opt-out text, which you should include in the message box.
Does a new line count as a character?
Yes. A line feed and a carriage return are both in the GSM alphabet and each takes one unit. Windows style line breaks therefore take two.
What do the extension characters cost?
The euro sign, square and curly brackets, the backslash, the caret, the tilde, the vertical bar and the form feed each take two units in GSM-7.
Is my text sent to a server?
No. The count is done in your browser and the message never leaves the page.
Sources and references
- 3GPP TS 23.038, alphabets and language-specific information: GSM 7-bit alphabet and extension table