Character Counter
Count characters with and without spaces, see the length in UTF-16 units and UTF-8 bytes, and check how many SMS parts your text needs.
Up to 500,000 characters. Your text never leaves your device: everything is counted in your browser.
Enter the limit of the field you are writing for to see how many characters are left.
How it works
The counter measures the same text four ways, because "how long is this text" has more than one answer.
Characters. Counted as what a reader sees as one character (a grapheme cluster, Unicode UAX #29), not as bytes or code units. A letter with an accent, an emoji with a skin tone and a flag are each one character. The first figure includes spaces and line breaks; characters (no spaces) leaves them out.
UTF-16 code units. This is the length JavaScript reports for a string. Most letters are one unit, characters outside the Basic Multilingual Plane (most emoji) are two, and joined sequences are more.
UTF-8 bytes. The size when the text is stored or sent as UTF-8, the encoding of most web pages and files. ASCII is one byte per character, letters such as ş, ğ and ü are two, many symbols are three and emoji are four.
Character limit. Enter the limit of the field you are writing for and the counter shows how many characters are left, or how many are over. The comparison uses the character count (with spaces).
SMS length. The text is checked against the GSM 03.38 default alphabet (3GPP TS 23.038). If every character is in it, the message is GSM-7: 160 characters in one message, 153 per part when it is split. Characters from the extension table (^ { } \ [ ] ~ | € and the form feed) take two of those places. If a single character is outside the alphabet, the whole message is UCS-2: 70 characters in one message, 67 per part, counted in UTF-16 units.
Examples
One text, four measurements
| Text | Characters | No spaces | UTF-16 units | UTF-8 bytes |
|---|---|---|---|---|
| Hello 😀 | 7 | 6 | 8 | 10 |
| Ağaçtan düşen şeftali, çiğ öğüt. | 32 | 28 | 32 | 42 |
| 🇹🇷 | 1 | 1 | 4 | 8 |
The Turkish sentence has ten letters that take two bytes in UTF-8, so its byte length is 10 higher than its character count. The flag is one character on screen and four UTF-16 units, because it is two regional-indicator symbols.
SMS parts
| Text | Encoding | Units | Messages |
|---|---|---|---|
| 160 letters "a" | GSM-7 | 160 | 1 |
| 161 letters "a" | GSM-7 | 161 | 2 (153 + 8) |
| Price: 5€ [new] | GSM-7 | 18 (€, [ and ] take 2 each) | 1 |
| Siparişiniz yola çıktı. | UCS-2 | 23 | 1 |
| 71 letters "ş" | UCS-2 | 71 | 2 (67 + 4) |
One character changes the limit. A text of 100 letters "a" fits in one message. Add a single "ş" and the same text is 101 UCS-2 units: it no longer fits in the 70 of a single UCS-2 message and is sent as two messages.
Euro signs add up. 80 euro signs are 160 GSM-7 places (two each) and fit in one message. 81 need two.
Things to watch for
- Characters are not bytes. A field that says "255 characters" and a database column that stores 255 bytes behave differently for Turkish, German and emoji text. When a limit is in bytes, check the UTF-8 figure; when it comes from code, the UTF-16 figure is usually the one a program sees.
- Spaces count unless a limit says otherwise. Most limits (SMS, form fields) include spaces and line breaks. Counting without spaces only helps when the rule explicitly excludes them.
- Line breaks differ. A Windows line break (CRLF) is one character on screen and two UTF-16 units. In an SMS each of the two takes one place.
- The SMS result is an estimate. The counter models the default alphabet and extension table only. Turkish and other national shift tables of the standard exist, but they need extra header data and are not what most senders use, so Turkish ş, ğ, ı and İ are treated as UCS-2 characters. Lowercase ç is also treated as outside GSM-7, because the default alphabet holds only capital Ç. Operators can handle both differently.
- Curly quotes and dashes force UCS-2. Characters such as “ ” ‘ ’ and – look like their plain versions but are not in the GSM-7 alphabet. A text pasted from a word processor often switches to UCS-2 for this reason; the list of characters under the SMS result shows which ones.
- Limit. Texts longer than 500,000 characters are rejected with an error rather than counted partially.
- Everything runs in your browser. The text is not sent to a server and is not stored.
Frequently asked questions
Last updated: 10/10/2026