Font Character Extractor

Source text

Whitespace
Unique characters46
Ranges produced16
UTF-8 payload50 bytes
Astral code points0
Reduction vs full Latin-175.9%

Extracted characters

RacirFontsbeudfyp.—Iwl:hmgN0123456789@#$%&*()…

CategoryCharacters
Lowercase letters20
Uppercase letters4
Digits10
Punctuation & symbols12
Whitespace1

Unicode ranges

Ranges are the compact form the subsetting step consumes; 16 of them describe all 46 code points.

unicode-range
U+0023-U+0026, U+0028-U+002A, U+002E, U+0030-U+003A, U+0040, U+0046, U+0049, U+004E, U+0052, U+0061-U+0069, U+006C-U+0070, U+0072-U+0075, U+0077, U+0079, U+2014, U+2026
Characters + summary
RacirFontsbeudfyp.—Iwl:hmgN0123456789@#$%&*()…

Characters: 46
Code points: 46
Superscript (astral) code points: 0

You Might Also Need

The font character extractor reduces a body of copy to the unique characters it contains and to the compact unicode-range notation a subsetter takes. It is the input step of subsetting, not a font reader.

What is Font Character Extractor?

The font character extractor works from text rather than from a font file. You paste the copy the font has to cover, choose whether whitespace counts, and the tool returns the distinct characters, a category breakdown, and a collapsed unicode-range list. That range list is the compact form a subsetting step consumes, and it is also what a @font-face unicode-range descriptor needs when a face is split across several files.

  • Whitespace handling: exclude, which is the default and the recommended setting for ranges, or include.
  • Readouts: unique characters, ranges produced, UTF-8 payload in bytes, astral code points, and the reduction against full Latin-1.
  • Category table covering lowercase letters, uppercase letters, digits, punctuation and symbols, and whitespace.
  • Outputs: the extracted character string, the unicode-range list, and a characters-plus-summary block.

The range collapse is straightforward but decisive: the distinct code points are sorted ascending and any run where each value is exactly one above the last is merged into a single start-end range. A paragraph of ordinary English typically reduces to a handful of ranges, which is far shorter than the character list and directly usable as a descriptor. Two numbers keep the result honest. The UTF-8 payload counts encoded bytes with TextEncoder, so a page of accented letters is visibly heavier than the same page in plain ASCII. The astral count reports code points above U+FFFF, because those are the ones a subsetter or an older toolchain is most likely to mishandle. The reduction percentage compares the distinct count against the 191 printable Latin-1 code points, which is a useful reminder of how much of a font a normal page never touches. A page that reuses a small character set stays cheap; one that mixes scripts pulls hundreds more code points into the list.

  • It reads paste, not fonts. There is no cmap lookup, so it cannot tell you which characters a file actually contains — only which ones your copy needs.
  • Code points, not grapheme clusters. A combining mark is a separate character here, and an emoji built from several code points counts as several.
  • Ligatures and composed sequences are invisible to it: "fi" is two characters, and no shaping is modelled.
  • The reduction figure uses printable Latin-1 as its baseline, so it describes that comparison rather than a real font's glyph count.
  • Ranges describe coverage, not order: the list is sorted by code point, not by first appearance in the text.

Use it as the first step whenever a face is too heavy for what a page renders: paste the real copy, excluding whitespace, and take the range list to whatever performs the subset. The same list is useful without subsetting at all, because splitting a large family into a Latin file and an extended file is done with unicode-range descriptors. When the copy includes symbols, the special character picker and the Unicode block explorer help assemble the exact characters, and the character code converter is the quick way to check a code point before it goes into a range.

How to use Font Character Extractor

  1. Paste the copy the font must cover into the source text area.
  2. Leave whitespace on exclude for a range list, or switch to include when spaces are part of what you are counting.
  3. Read the panel: unique characters, ranges produced, UTF-8 payload and any astral code points.
  4. Copy the unicode-range list, or the characters-plus-summary block when the character set itself is the deliverable.

When to use Font Character Extractor vs related tools

This is the page to visit before cutting a font down to size, because the range list it produces is the specification a subsetter follows. When the characters themselves need finding rather than counting, the Unicode character explorer and the special character picker are the places to look them up, and the Unicode block explorer explains which ranges a script lives in. Code points that need converting between notations go through the character code converter, and the list this tool produces is what a @font-face generator or a split family uses as its unicode-range descriptor.

Privacy & Security

This tool runs entirely in your browser — no data ever leaves your device. There is no server round-trip, no upload, no logging, and no account required. Your input is processed locally using client-side JavaScript and is never stored, transmitted, or accessible to anyone else. When you close the tab, everything disappears.

Frequently asked questions about Font Character Extractor