creatorvalet

Character counter

Count visible characters, words, whitespace, lines, code points and UTF-8 bytes locally — with emoji kept intact.

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

Support us with a link or a share

№ 4587waiting

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.

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.

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.

CRLF is one line boundary, not two. 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.

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.

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.

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.