SMS Character Counter

Accurately count SMS characters with GSM-7 and UCS-2 encoding detection. See your segment count, remaining units, and a highlighted preview showing which characters cost extra or force UCS-2 encoding.

Character Preview

Start typing to see character analysis…
GSM-7 extension char (2 units) — e.g. { } [ ] ^
Forces UCS-2 encoding (non-GSM char) — e.g. emoji, accented chars

⚠ Emoji ZWJ sequences and combining marks are counted by UTF-16 code units (matching Twilio/most gateways). This tool does not perform grapheme cluster splitting.

SMS Analysis

Encoding: GSM-7
0 Parts (segments)
0 Units Used
160 Units Remaining

160 units/part

Estimated Send Cost

USD, US → US, 1 recipient

⚠ Public list pricing estimates, USD, US → US. Carriers charge per part (segment). Calculate full campaign cost →
How parts (segments) are calculated

Encoding detection: Every character is checked against the GSM-7 character set (128 basic Latin + symbols). If any character is outside that set (emoji, Arabic, Chinese, many accented letters, etc.), the entire message switches to UCS-2 encoding.

Single-message limits: GSM-7 = 160 units per message · UCS-2 = 70 units per message.

Multi-part overhead: When a message exceeds the single-message limit it becomes concatenated (multi-part). Each part includes a User Data Header (UDH) that reduces usable space: GSM-7 = 153 units/part · UCS-2 = 67 units/part.

Parts formula: parts = ceil(total units ÷ per-part limit). A 161-unit GSM-7 message → ceil(161 ÷ 153) = 2 parts.

Billing: Carriers charge per part, not per message. Sending a 2-part message to 500 recipients = 1,000 billable parts.

SMS Encoding Reference

Encoding1 PartMulti-part
GSM-7160153/part
UCS-27067/part

Multi-part messages use a header that reduces per-part capacity. Parts: ceil(units ÷ per-part limit).

GSM-7 Extension Characters

Each costs 2 units (escape + char):

^ { } \ [ ] ~ |

Frequently Asked Questions

What is the difference between GSM-7 and UCS-2 SMS encoding?
GSM-7 is the default SMS encoding supporting 128 basic characters (the Latin alphabet plus common symbols). A single GSM-7 message holds 160 characters. UCS-2 is used when the message contains characters outside the GSM-7 set (like emoji, Arabic, Chinese, or many accented letters). A single UCS-2 message holds only 70 characters, meaning the same emoji-containing message uses far more segments.
Why do some characters cost 2 units in GSM-7?
The GSM-7 extension set contains 9 characters: ^ { } \ [ ] ~ | €. These require an "escape" byte before them, costing 2 units instead of 1. This is a historical artifact of the GSM 03.38 specification. If you include even one extension character, it counts as 2 units — which can push you into a second segment.
How do emoji affect SMS segment count?
Emoji are not in the GSM-7 character set, so any emoji in your message switches it to UCS-2 encoding. UCS-2 limits single messages to 70 characters. A common emoji like 😀 takes 2 UCS-2 code units (it's a "surrogate pair" in UTF-16). This can dramatically increase your segment count and cost.
How is multi-part SMS segmentation calculated?
When a message exceeds 160 units (GSM-7) or 70 units (UCS-2), it becomes a multi-part message. Each segment in a multi-part message includes a User Data Header (UDH) that reduces available space to 153 units (GSM-7) or 67 units (UCS-2) per segment. The number of segments is: ceil(total units ÷ per-segment limit).