The table inside a font that decides whether your text appears at all
Every font file carries a lookup table called the cmap, and it is the thing that answers the only question that matters here: given this character, which drawing does this font hold for it? A renderer consults it before anything else. If the answer is glyph zero, the font has nothing, and you get the empty rectangle that designers call tofu, or a substitute quietly pulled from some other font on the machine. This tool reads the same table the renderer reads, which is why its answer is not an estimate.
The alternative approach, which most font checkers use, is to draw the character on a canvas in the font under test, draw it again in a fallback, and compare the pixels. It fails in three separate ways. Two fonts can draw a letter identically, so a real glyph looks like a miss. The browser substitutes a different font when one is missing, so a miss looks like a hit. And on a page with a font stack you are measuring whichever font actually won, not the one you asked about. A lookup is not a better guess than a measurement. It is a different kind of thing.
Reading it correctly takes some care, because a cmap is several formats in one table and the useful ones are old. Format 4 covers the Basic Multilingual Plane through sorted segments, each mapping a range of characters either by adding a fixed delta or by pointing into a shared array of glyph ids, using a byte offset measured from the pointer’s own position: an addressing trick from an era when the table was memory-mapped rather than parsed. Format 12 is the flat one that reaches past the BMP, where the emoji and the rarer scripts live. A font that has both carries the wider one as a superset, so that is the one to read.
The trap in both is glyph zero. A segment can span a range of characters and still map some of them to nothing, and a reader that trusts the segment boundaries will report coverage the font does not have. That is a false positive on the exact question being asked, so every format here is evaluated down to the individual glyph id rather than to the range that contains it. Symbol fonts need naming too. Wingdings and its relatives hold no letters at all: they map the keyboard into a private-use block at U+F000 and draw a picture for each key, which makes them look like a perfect match for ordinary text. Where a font is doing that, the result says so.
None of this needs the font file. A table directory sits in the first few hundred bytes and gives the offset and length of every table in the file, so the coverage of a twenty megabyte CJK font can be read with two short range requests against the file on disk. That is what makes scanning a few hundred installed fonts possible in a browser tab instead of an exercise in exhausting memory, and it is why nothing has to be uploaded: the bytes that answer the question are small, and they never have to leave the machine they are already on.
One last thing is subtracted before any font is asked anything. Real text is full of characters that are never drawn: the zero-width joiners that hold an emoji family together, the variation selector that makes a heart red, the direction marks around an Arabic phrase, the byte-order mark an editor left at the front of the file. A font renders all of that correctly while owning a glyph for none of it. Counting them would report every font on the machine as failing, so they are filtered out first, and what remains is the set of characters a font is genuinely responsible for.