Character Frequency Counter
Count the frequency of each character in your text and display a breakdown.
About This Tool
You're debugging why a regex is matching the wrong characters or analyzing a passphrase for entropy estimation. Paste the text, see exactly how often each character appears — sorted by frequency, alphabetically, or by Unicode code point.
The counter handles Unicode correctly: emoji count as one character, combining diacritics are noted, zero-width characters (which are surprisingly common in copy-pasted text) get flagged. If your input has invisible characters causing weird behavior, this is where you'll find them.
Case sensitivity is a toggle. So is whitespace handling — you can include spaces, tabs, and newlines in the count or strip them. Useful for cipher analysis homework, character-set audits, and confirming that yes, that string really is 80 characters of the letter 'A'.
The counter walks the input character by character, builds a frequency map, then sorts and renders. The Unicode handling matters more than you'd expect: JavaScript's default string iteration uses 16-bit code units, which means emoji and other characters outside the Basic Multilingual Plane get split into surrogate pairs. The counter uses proper Unicode iteration so a thumbs-up emoji counts as one character, not two. For complex graphemes (a flag emoji is technically two regional indicator characters; a skin-tone-modified emoji is a base emoji plus a modifier), you can toggle between 'visual character' counting (one for the rendered glyph) and 'code point' counting (the underlying Unicode points).
A worked example: paste in 'café'. With grapheme counting, that's 4 characters: c, a, f, é. With code-point counting using NFC-normalized text, also 4. With code-point counting using NFD (decomposed) text, 5: c, a, f, e, and a separate combining acute accent. The result depends on how your source text was normalized, which is invisible to the eye but real to the byte stream. The counter shows both interpretations when they differ, which is often the moment people realize their text has hidden characters.
Where this becomes useful diagnostically: invisible characters in copy-pasted text. Zero-width spaces (U+200B), zero-width joiners (U+200D), zero-width non-joiners (U+200C), and various invisible directional marks can sneak into text from translated documents, formatted PDFs, or text that's been through certain CMS systems. A regex that 'should match' might fail because of a zero-width character splitting what looks like a single word. The counter flags these explicitly so you can spot them.
For passphrase or password analysis, character distribution is a rough entropy estimate. A truly random 12-character password should show approximately uniform distribution across the chosen character set. Heavy bias toward certain characters suggests memorability patterns (keyboard rows, common letter swaps) that reduce real entropy below what the length alone would suggest. The counter helps verify that 'random' passwords are actually random; it doesn't replace a password strength meter, but for analysis of generated passwords or transcribed seed phrases, it's a quick sanity check.
The about text and FAQ on this page were drafted with AI assistance and reviewed by a member of the Coherence Daddy team before publishing. See our Content Policy for editorial standards.