What counts as one character
The text is split into Unicode code points, so an emoji stored as a surrogate pair counts once rather than twice. Percentages are calculated against the number of characters actually counted, not the length of the input, which is why the share figures move when you switch whitespace or punctuation on. The header line shows both numbers side by side so the denominator is never a mystery.
Case folding is applied after the character is classified, so turning it on merges A into a without changing which bucket the character was counted in. Accent folding decomposes the character and drops the combining marks, so é, è and ê all land on e. Both are off-by-default assumptions worth thinking about: for cipher work you usually want case folded and accents left alone; for font subsetting you want neither, because the font needs the exact glyphs.
English letter frequencies, for reference
The classic ordering for English prose is e, t, a, o, i, n, s, h, r, d, l, u, and the top six alone typically account for about 40 percent of the letters. That regularity is what makes simple substitution ciphers breakable: rank the ciphertext, assume the most common symbol is e, and the second most common is usually t or a.
| Letter | Typical share of English letters |
|---|---|
| e | ~12.7% |
| t | ~9.1% |
| a | ~8.2% |
| o | ~7.5% |
| i | ~7.0% |
| n | ~6.7% |
Short samples diverge wildly from this. A single sentence, a list of product codes or anything with a repeated proper noun will not match the table, and that is a property of your sample rather than a fault in the count. Pangrams are the extreme case: the default text in the box is deliberately flat, because it was written to use every letter.
Non-Latin scripts
Every script is counted the same way — by code point — so Greek, Cyrillic, Arabic, Hebrew, Han, kana and Hangul characters all appear in the ranked table normally. What changes is the summary at the bottom, which separates Latin letters from letters in every other script rather than trying to name each one.
Two caveats follow from counting code points. Hangul syllables are counted as whole syllables, not as the two or three jamo they are composed from, so a Korean text shows a long tail of distinct syllables rather than a short list of consonants and vowels. And a letter written in decomposed form — e followed by a combining acute rather than a single é — counts as two characters unless accent folding is on, which normalises the pair away.
What this is for, and where it stops
Font subsetting is the most practical use: paste every string that will ever appear on the site, take the distinct character list, and hand it to the subsetter so the web font ships only the glyphs you need. OCR checking is the second — a run of the same odd symbol in the table usually means one glyph is being misread throughout. Keyboard layout work and typing drills are the third.
This tool works one character at a time and nothing more. For counting words, use the word frequency counter; for a general reading-level and length summary, use text statistics. Input is capped at 500,000 characters, and the whole count happens in the page — the text is never uploaded.
Questions people ask
Why do the percentages change when I include spaces?
Because the denominator changes. Percentages are the share of characters that were actually counted, and in ordinary English prose the space is by a distance the single most common character — roughly one in six. Including it pushes every letter's share down by about that much. Neither view is wrong; cipher work traditionally excludes spaces because they are usually stripped from the ciphertext anyway, and typing-drill work includes them because your thumbs still have to press the bar.
Can I count pairs of letters instead of single ones?
No, this counts single characters only. Digram and trigram frequencies are genuinely more useful for cracking ciphers than single letters — th, he and in dominate English digrams — but they need a different tool. What you can do here is copy the CSV out and do the pairing in a spreadsheet.
What does the CSV contain?
Three columns: character, count, percent, with a header row. The character is JSON-quoted, so a comma, a quote mark or a space comes through as a proper single value instead of breaking the column layout, and control characters appear as their escape sequences. It covers only the rows currently shown, so raise the row count before copying if you want the full tail.
Is it accurate for very large files?
Up to the 500,000 character cap the count is exact. Above that the tool refuses rather than pretending, because a single synchronous pass over a multi-megabyte string will hang the tab on a slow machine. For anything larger, split the file, run the pieces and add the counts together in a spreadsheet — frequency counts sum cleanly across chunks.