creatorvalet Search

Character counter

Count visible characters, words, emoji sequences, whitespace, lines, code points and UTF-8 bytes locally.

  • SECURE
  • NO UPLOADS
  • NO SIGNUP
  • BROWSER BASED
  • FREE
  • FOREVER.

Support us with a link or a share

№ 6500waiting

Nothing at the counter yet.

What this character counter calls a character

The large character total counts grapheme clusters: the symbols a person normally experiences as single characters. An accented letter typed as e followed by a combining accent is one grapheme. A family emoji joined from several people and invisible joiners is one grapheme too. Counting JavaScript string positions would split both cases, so that number appears separately as UTF-16 code units rather than being passed off as the answer.

Spaces are included in the main total because they occupy real positions in text. The receipt also shows a total without Unicode whitespace, which excludes ordinary spaces, non-breaking spaces, tabs and line breaks. It does not remove punctuation or invisible formatting characters. If the job is to find and name those characters, use the invisible character detector.

Code points, UTF-8 bytes and UTF-16 units are different answers

Unicode assigns a code point to each encoded element, but several code points can cooperate to draw one grapheme. UTF-8 then stores those code points in between one and four bytes. JavaScript stores strings as UTF-16 code units, where a code point outside the Basic Multilingual Plane takes a surrogate pair. None of these counts is more “correct” in isolation; each answers a different question, which is why the receipt keeps all of them visible and named. If the split between a character and its code points is new to you, what Unicode is walks through characters, code points and bytes one layer at a time.

Counting also helps verify transformed text. The fancy text generator replaces only supported Unicode code points, then reports how many changed and how many were preserved; this counter remains the better tool when you need graphemes, bytes or UTF-16 units.

Use graphemes when the limit is about what a reader sees, code points when inspecting Unicode data, UTF-8 bytes for an encoded payload, and UTF-16 units when an API defines length using JavaScript or another UTF-16 environment. The longer explanation in UTF-8 versus ASCII shows why even ordinary accented text can make byte count and character count diverge.

A digit count cannot identify a numeric field's unit. Ten or thirteen digits may suggest a convention, but short fixtures and distant dates break that guess. Use the Unix timestamp converter when the value represents epoch seconds, milliseconds, or microseconds and choose its unit explicitly.

How words and line endings are counted

Words use the browser's Unicode word-boundary implementation rather than splitting only on ASCII spaces. Contractions such as don't stay together, and scripts that do not put spaces between every word can still be segmented. Word boundaries are linguistic, so this total is useful for document length rather than a grammar judgment. To rank repeated terms and export their shares, use the separate word frequency counter.

Counting also works in the other direction, when the question is how much text a layout needs rather than how much it already has. The lorem ipsum generator produces an exact number of words, sentences, paragraphs or list items from a seed, so a column can be filled to a measured target and refilled identically later; bring the result back here when the limit is expressed in graphemes or bytes rather than words.

CRLF is one line boundary, not two, and a boundary at the end terminates the last line instead of inventing another empty one. A pasted line feed and a decoded Windows line ending therefore produce the same number of lines. Opening a file preserves the decoded text for this analysis, while the UTF-8 byte total deliberately describes that text after decoding — it does not claim the source file was UTF-8.

How emoji sequences and frequency are counted

Emoji totals use CreatorValet's pinned Unicode Emoji 17.0 sequence rules, not the browser's current font or an Intl.Segmenter guess. A complete family, keycap, regional flag or subdivision flag counts as one sequence even when it contains several code points. The occurrence list stays in source order; the frequency table groups exact observed sequences without normalizing variation selectors, skin tones or joined forms.

Standalone skin-tone and hair components are not called complete emoji. Text-style symbols and malformed or incomplete emoji syntax also count as zero. These are the same sequence boundaries used by the emoji remover, so a recognized sequence is not split differently between the two tools. Long texts keep complete totals and frequencies while the visible occurrence preview stops after 100 rows to keep the page responsive.

Why there are no social-platform limits here

A platform limit is an algorithm and a product policy, not a universal character definition. X applies weighted counting to some Unicode and treats URLs specially; account tiers can have different limits. SMS chooses GSM-7 or UCS-2 and charges by segments, so a single unsupported character can change the capacity of the whole message. Search titles are truncated to fit a rendered width rather than a published character ceiling. A generic counter that paints one of those numbers green would be precise-looking and wrong.

Everything here runs locally. Short text and multi-megabyte files use the same pure count, but the work runs outside the page's main thread so Unicode segmentation does not freeze typing. Choosing another file or editing the text cancels the stale run; only the receipt for the current text is allowed to appear.

Have an idea for this tool?

Tell us what would make this tool more useful, or suggest another tool you would like us to build.

Questions

Does the character count include spaces?

The main character total includes whitespace. A second total excludes every Unicode whitespace cluster, including spaces, tabs and line breaks, so the two answers are visible without changing a setting.

Why can characters, code points and UTF-16 units be different?

They measure different representations. A visible family emoji is one grapheme cluster, seven Unicode code points joined into one symbol, and eleven UTF-16 code units in JavaScript. This counter labels all three instead of calling each one “characters”.

How are UTF-8 bytes counted?

The browser encodes the current text with the standard UTF-8 TextEncoder and reports the resulting byte length. A locally opened file is decoded before counting, so this is the UTF-8 size of the text now — not a claim about the file’s original encoding or byte-for-byte size.

How are emoji counted?

Each complete sequence recognized by the pinned Unicode Emoji 17.0 rules counts once, including joined families, keycaps and flags. Standalone skin-tone or hair components, text-presentation symbols and incomplete emoji syntax do not count. Exact observed variants remain separate in the frequency table.

Does this check the character limit for X, SMS or Instagram?

No. Those are separate algorithms, not simple character totals. X weights some Unicode and URLs specially and has account-tier limits; SMS uses GSM-7 or UCS-2 segments. Platform rules also change, so this page does not present them as permanent limits.

Is the text uploaded?

No. Typing, file decoding and every count run in this browser tab. Large text is counted in a local worker so the page can remain responsive, but it is never sent to a server.