Character Frequency Map

Count every character and show descending frequency table

Counts each unique character in your text and outputs a frequency table sorted from most to least common. Iterates by Unicode code point and offers whitespace-ignoring and case-folding options. Runs in your browser. It runs free in your browser on Gera Tools, with nothing uploaded.

Last updated Source: Gera Tools

How are characters counted?

The tool iterates over the text by Unicode code point rather than by UTF-16 unit, so accented letters and most emoji are counted as a single character instead of being split apart.

A character frequency map counts how often every distinct character appears in a piece of text and presents the result as a sorted table. It is a staple of classical cryptanalysis and a quick way to audit the makeup of any string.

How it works

The tool walks the text one code point at a time and tallies each character in a map, then sorts the results:

for each codePoint in text:
    if ignoreWhitespace and char is whitespace: skip
    if caseInsensitive: char = char.toLowerCase()
    counts[char] += 1
sort rows by count desc, then by code point asc

Iterating by code point with a for...of loop means surrogate pairs such as emoji are handled correctly. Whitespace characters are given readable labels so their counts are visible.

Worked example: Mississippi

Paste Mississippi into the tool with case-insensitive mode on and whitespace ignored. The result looks like:

CharCount
i4
s4
m1
p2

With the s and i tied at 4, the tie is broken by Unicode code point: i (U+0069) comes before s (U+0073), so i ranks first. Total characters: 11 letters, 0 spaces.

Use cases beyond cryptanalysis

Substitution cipher analysis. Paste the ciphertext, enable case-insensitive mode, ignore spaces. The most frequent ciphertext character is a strong candidate for e, the most common letter in English. Map the top five against the English frequency order (e, t, a, o, i, n, s, h, r) to get an initial key.

Data quality audits. Copy a CSV column or a database export and check for unexpected characters: stray tabs, non-breaking spaces (U+00A0, distinct from regular space), zero-width joiners, or right-to-left marks. These are invisible in a text editor but immediately visible in a frequency table because they appear with their Unicode label rather than a blank.

Encoding checks. If you are debugging a file that was supposed to be ASCII but shows unusual characters, a frequency table pinpoints which unexpected code points are present and how many times — much faster than scanning line-by-line.

Language detection heuristics. Different scripts have strongly characteristic characters. Arabic texts have high counts of ا (alef) and ل (lam); Spanish texts show ñ and accented vowels; Russian texts show Cyrillic code points. A quick frequency scan can confirm whether text decoded correctly after a charset conversion.

Minified code review. Checking minified JavaScript or CSS? A frequency map quickly shows whether curly braces, semicolons, and parentheses appear in roughly expected ratios — useful for spotting truncation or corruption.

Tips for getting the most out of the table

  • Case-insensitive mode is essential for natural-language analysis; without it, E and e appear as separate entries and split a character’s true count.
  • Ignore whitespace removes space, tab, newline, and carriage-return from the table when you only care about letter or symbol distribution.
  • Copy the table as tab-separated values and paste into a spreadsheet for further analysis, charting, or comparison against reference frequencies.