Character Counter

Characters counted live as you type — with spaces and without — plus the word count alongside. The number that decides whether your text fits the form, the bio box, or the limit.

0 Characters
0 Without spaces
0 Words
0 Sentences

What the counter counts

Characters here are Unicode code points: each letter, digit, punctuation mark, space, line break, and emoji component counts once, with no weighting and no normalization. The passage the methodology page runs through every counter — "Dr. Smith arrived at 9 a.m. She left early." — reports 43 characters, 35 without spaces, 10 words, and 3 sentences, and each figure follows from a stated rule rather than from judgement. The character figure is the length of the text in code points, spaces and punctuation included. The without-spaces figure is the same count with every whitespace code point removed, so the gap between them — 8 here — is exactly the number of spaces, tabs, and line breaks in the passage. The sentence count is 3 rather than the two a reader would give, because "Dr." followed by a space triggers the sentence rule; that over-count is a documented limitation of the sentence rule, not of the character count, which it does not touch. Every number in this article is produced at build time by the same engine that runs in the box above, so the copy cannot disagree with the tool. The longer treatment of what a code point is, and why one picture on screen can be several of them, is the guide Characters, code points and emoji; this page covers the rules as they apply to the four figures above.

With spaces, without spaces, and the characters you cannot see

"Characters" — the large figure — is the count that decides whether a text fits a field, because a field stores every character, spaces included. "Without spaces" is a second convention: the same text with every whitespace code point removed. It exists because some rules are written that way, and when a rule you are working under says characters excluding spaces, that is the figure to use; otherwise use the larger one. Whitespace means what Unicode classifies as whitespace, which includes the line break, so a line break is a character in the first figure and vanishes from the second.

The consequence that catches people is that whitespace is invisible. Take a two-line note, "Send it today.↵Thanks.", where ↵ marks the line break: 22 characters, 19 without spaces. Now add a trailing space after "today.", two after "Thanks.", and a final line break — nothing changes on screen. The without-spaces figure stays at 19; the character figure rises to 26, 4 more than before, every one of them a character a field will count and a reader will never see. The line counter, which follows the rule that a trailing newline terminates the last line rather than opening a new one, reports 2 lines for both versions, so the line figure is no help in spotting the difference; only the character figure shows it. When a field rejects text that appears short enough, trailing spaces and blank lines are the first thing to look for.

Line breaks themselves come in two forms. A break stored as a single newline is one code point. A Windows-style break is a carriage return followed by a newline — two code points — and the character count counts both, because it counts what it is given and never normalizes. The same note with its break stored that way is 23 characters rather than 22, still 19 without spaces, and still 2 lines, because the line rule normalizes both forms to one break before counting. That is a deliberate split: lines should not depend on which platform produced the file, whereas the character count reports exactly what is stored, which is what a strict field will see.

Code points, not pictures: emoji and accents

A code point is the unit Unicode assigns a number to, and it does not always correspond to one picture on the screen. The plain thumbs-up, 👍, is 1 code point. Add a skin-tone modifier — 👍🏽 — and the count is 2, because the modifier is its own code point riding on the base symbol; the screen merges them into one picture. A flag such as 🇯🇲 is 2 code points, a pair of regional-indicator symbols that together select the flag. A family emoji built by joining several people — 👨‍👩‍👧‍👦 — is 7 code points: 4 people and the 3 invisible joiners between them, each a code point in its own right.

Symbol What you see Code points
é é, precomposed 1
👍 Thumbs-up 1
👍🏽 Thumbs-up with a skin-tone modifier 2
🇯🇲 A flag 2
👨‍👩‍👧‍👦 A family emoji joined from several people 7

In a sentence the arithmetic is simply additive. "Great job 👍" is 11 characters; "Great job 👍🏽" is 12; "Made in 🇯🇲" is 10; "Family night 👨‍👩‍👧‍👦" is 20. None of these is an error. A field that stores code points will see the same numbers, and the counter is telling you what it will see.

Accented letters raise a subtler version of the same point. An é can be stored as one precomposed code point or as a plain e followed by a combining accent — two code points that render identically. "The café opens at noon." with the single-code-point é is 23 characters; the same sentence with the decomposed spelling is 24. This counter does not normalize, so it reports the raw count for the decomposed text — again, what a raw field will see. The letter counter takes the other choice: it normalizes to Unicode NFC first, which composes e plus accent into é before counting, so it reports 23 characters and 18 letters for either spelling. Both pages state their convention; the difference between them on decomposed input — 1 here — is exactly the number of combining marks that had a composed form. Text pasted from some sources arrives decomposed, and a count that is one or two higher than expected, with no visible cause, is the signature.

Code points versus UTF-16 units

There is a second way to measure the same text, and it explains many disagreements between counters. Some platforms count UTF-16 code units rather than code points. In that encoding a code point occupies either one or two units: ordinary letters, digits, and punctuation take one, and most emoji take two. A counter reporting UTF-16 units therefore charges most emoji twice while agreeing with this page on everything else. The engine can measure both. Its SMS segmenter must count in UTF-16 units once a message contains any character outside the basic GSM alphabet, and that is the source of the second column below; the first column is what this page reports.

Text Code points UTF-16 units Gap
"Great job 👍" 11 12 1
"Great job 👍🏽" 12 14 2
"Made in 🇯🇲" 10 12 2
"Family night 👨‍👩‍👧‍👦" 20 24 4

Read the gap column as a count of two-unit code points, checked at build time against the emoji measured on their own. In "Great job 👍" every letter and space costs one unit under both conventions, so the whole gap of 1 is the single emoji. In "Great job 👍🏽" both the base and the modifier are two-unit code points, so the gap is 2. The flag's two regional indicators are each two units, gap 2. The family emoji's 4 people are two units each while its 3 joiners are one unit under both conventions, so its gap is 4 — not 7, and not 11. Neither count is wrong. They answer different questions — how many code points, or how many storage units — and a text near a strict limit can fit under one convention and not the other. The guide Characters, code points and emoji works through the encoding itself; here it is enough to know which convention a given field uses, and that this page reports code points.

Checking a text against a limit

The engine's limit check takes a text and a whole-number limit you supply, and returns four things: the units used, the limit, the remaining allowance, and whether the text is over. Units are code points — the same figure as the large number above — never the without-spaces count. Set an illustrative limit of 40, chosen here only to show the arithmetic, and check the methodology passage: it uses 43 units, so it is 3 over. Its without-spaces figure, 35, would appear to fit, which is exactly why the check ignores that figure: a field counts spaces. Now set the limit to the code-point length of "Great job 👍🏽", 12, and check that sentence: 12 units, 0 remaining, not over. Under a UTF-16 convention the same sentence measures 14 units and would be 2 over the same limit. That is the whole practical content of the previous section in one example.

This page publishes no platform limits, deliberately. Limits belong to the platforms that set them, change without notice, and are sometimes applied in units this page does not report; the honest procedure is to take the code-point count here as the baseline, confirm which convention the destination uses, and confirm its current limit from its own documentation. The engine's only limit of its own is on input size: up to 2,000,000 characters per analysis, beyond which it returns an explicit message rather than a silent wrong answer. Empty or whitespace-only text reports zeros throughout.

When another counter shows a different number

Because every rule above is stated, a disagreement with another tool can usually be traced in a minute. If the other count is higher by exactly the number of emoji, it is counting UTF-16 units. If it is lower by the number of spaces and line breaks, it is the without-spaces convention. If it is lower by one or two with accented letters present, it normalizes and this page does not — the letter counter here will match it. If it is higher by the number of line breaks, the text carries Windows-style breaks and one tool normalized them. And if it is lower by a handful with no visible cause, trailing whitespace or a blank line is being counted here and trimmed there. Word processors and form fields each choose among these conventions; none of the choices is a miscount, and the counter above reports the one it states.

Frequently asked questions

With spaces or without — which count should I use?

With spaces, unless a rule you are working under says otherwise. A field stores every character you type, spaces and line breaks included, so the larger figure is the one that decides whether text fits. "Without spaces" is the same count with every whitespace code point removed — a second convention some rules are written in, shown here so you never have to work it out by hand.

How are emoji and accented letters counted?

As Unicode code points. A precomposed é is 1; a plain thumbs-up is 1; the same thumbs-up with a skin-tone modifier is 2; a flag is 2; and a family emoji joined from 4 people is 7, joiners included. Some platforms count UTF-16 units instead, which charges most emoji two — "Great job 👍" is 11 code points but 12 UTF-16 units — so the same text can legitimately have two counts near a strict limit.

Do line breaks count as characters?

Yes. A line break stored as a single newline is one code point, and a Windows-style break — carriage return plus newline — is two, because this count never normalizes what it is given. The two-line note "Send it today.↵Thanks." is 22 characters with a plain break and 23 with a Windows-style one; the line counter reports 2 lines either way, because the line rule normalizes first. Breaks are whitespace, so neither form appears in the without-spaces figure.

Why does this page not list platform character limits?

Because they are not this page’s to state: each platform sets its own, changes it without notice, and may apply it in UTF-16 units rather than code points. What this page can state is the code-point count of your text, which is the baseline every limit is measured against. Confirm the destination’s current limit and counting convention from its own documentation, and where it offers a live counter, trust that counter for the final check.

Why does another counter give a different number for the same text?

Almost always one of five conventions. Higher by the number of emoji: it counts UTF-16 units. Lower by the number of spaces and breaks: it is the without-spaces figure. Lower by one or two with accents present: it normalizes decomposed accents and this page does not. Higher by the number of line breaks: the text has Windows-style breaks and one tool normalized them. Lower by a few with no visible cause: trailing whitespace or a blank line is being trimmed there and counted here.

Why does the letter counter report fewer characters than this page?

Only on text with decomposed accents. The letter counter normalizes to Unicode NFC before counting, so an e followed by a combining accent becomes the single letter é; this page reports the raw code points. "The café opens at noon." is 23 characters on both pages, while the same sentence with a decomposed é is 24 here and 23 there. The two figures agree on any text that is already composed.

Is there a maximum length?

The engine accepts up to 2,000,000 characters per analysis and reports an explicit message, never a silent wrong answer, above that. Every count is computed over the full text on every keystroke — there is no sampling at any size — and empty or whitespace-only text reports zeros throughout.

Related: the guide Characters, code points and emoji for the encoding behind every number above, the letter counter for the normalized breakdown into letters, digits, spaces, and symbols, the line counter for the line rules, and the guides index for the rest of the site's conventions.

Counting happens locally in your browser — nothing you type is transmitted or stored. Counts are Unicode code points; platform-specific quirks are noted above. See the methodology page.