Paste your message
Analysis updates live as you type. Nothing is sent anywhere — this runs entirely in your browser.
US rate example — see per-country rates before top-up. Published floor is around $0.004/segment on the cheapest routes.
What this measures, and why septets aren't characters
GSM 03.38 defines the default SMS alphabet: 128 code points, each normally costing one 7-bit septet. Ten of those code points — form feed, ^, {, }, \, [, ~, ], |, and € — live in an extension table and are reached with an escape sequence, so each one costs 2 septets instead of 1. A single SMS holds 160 septets. Type one character that isn't in the GSM-7 alphabet at all — a curly quote, an em dash, an emoji, non-Latin script — and the whole message silently re-encodes as UCS-2, where the budget drops to 70 characters. None of that shows up as a longer message on screen; it shows up as a bigger bill.
Once a message is long enough to need more than one segment, a 6-byte User Data Header (UDH, defined in 3GPP TS 23.040) gets added to every segment so the handset can reassemble them in order. That header isn't free: in GSM-7 it consumes 7 septets after padding to a septet boundary, cutting the per-segment budget from 160 to 153. In UCS-2 it consumes exactly 3 character units, cutting 70 down to 67. This tool runs the real math — septet-by-septet, segment-by-segment — instead of just dividing character count by 160.
Invisible and lookalike characters
The most common way a clean-looking message quietly becomes UCS-2 is pasting from somewhere that "smart" typography: Word, Google Docs, Notes apps, and most iOS/Android keyboards auto-substitute straight quotes for curly ones, hyphens for en/em dashes, and three periods for a single ellipsis character. None of these are visually distinct from their GSM-7-safe equivalents, and several — a non-breaking space, a zero-width space or joiner, a byte-order mark, directional marks — render as nothing at all. This tool scans for all of them, shows what's actually there, and rewrites the message to the closest GSM-7-safe equivalent with one click.
Frequently asked questions
Why does a curly apostrophe or an emoji double my SMS cost?
GSM-7 is the default SMS alphabet and gives you 160 characters in one segment (153 per segment once a message splits into more than one). A single character outside that alphabet — a curly quote, an em dash, an ellipsis character, an emoji — forces the whole message into UCS-2 encoding, which drops the budget to 70 characters single-segment (67 per segment when concatenated). The same wording can jump from 1 segment to 2, or 2 to 3, purely from an invisible encoding change, not from added length.
What is UDH overhead, and why is a concatenated segment shorter than a single SMS?
Once a message needs more than one segment, each segment carries a 6-byte User Data Header (UDH) that tells the handset how to reassemble the parts: a reference number, total segment count, and sequence number. In GSM-7, that header consumes 7 septets after padding to a septet boundary, leaving 153 of the normal 160 septets for text. In UCS-2, the 6-byte header consumes exactly 3 character units, leaving 67 of the normal 70. This overhead applies to every segment, including the first, the moment a message goes multipart.
Which characters cost 2 septets in GSM-7 instead of 1?
The GSM 03.38 extension table holds 10 characters that each require an escape sequence, so they cost 2 septets: form feed, caret (^), left brace ({), right brace (}), backslash (\), left bracket ([), tilde (~), right bracket (]), pipe (|), and the euro sign (€). Everything else in the GSM-7 default alphabet costs 1 septet. Extension characters don't force UCS-2 on their own, but enough of them will push a message over its septet budget the same way length does.
Does this tool send my message anywhere?
No. The GSM-7 tables, UDH math and character analysis all run in your browser as static JavaScript. Nothing you type is transmitted, logged, or stored server-side. The optional shareable link encodes your message into the URL itself, so treat that link the same way you'd treat pasting the message anywhere else.
Is $0.0125 per segment what I'll actually pay?
No — it's a US-route example rate for this calculator, not a quote. Per-segment pricing varies by destination country and route; published rates on low-cost corridors can run as low as roughly $0.004 per segment. Check current per-country rates before topping up rather than budgeting off this default.