Character Map

Look up a symbol, copy it, and read its code point — or find out what is really in your text.

Runs on your deviceTextWorkingNo account needed

What this tool does

Character Map works in two directions. Browsing is the first: pick one of eleven curated sets — arrows, maths, currency, punctuation and quotes, Greek letters, accented letters, fractions and numerals, shapes and marks, box drawing, legal and technical, and spaces and invisibles — and narrow it with the search box. The box matches on the written name, on the character itself, or on the code point, so hook leaves the two hooked arrows, → leaves the single row it names, and U+2192 leaves that same row again. A broad word is no filter at all: search arrow inside the Arrows set and all thirty-one rows stay, because every name there contains it.

Identifying is the other direction. Switch Show to the characters in my input, paste anything, and every distinct character comes back as its own row with a count of how often it appears. That is how the no-break space that broke a layout gets found, or the curly apostrophe a shell script refused, or the byte order mark a spreadsheet left at the front of a CSV export. Each row carries the code point written as U+ and its hexadecimal value — U+00A0, or U+1F4BB for a character above the basic plane — plus an HTML reference and a CSS escape, unless Detail is set to name and code point only.

Three things are worth knowing before you lean on it. The curated sets hold 345 characters between them, not the 150,000-odd that Unicode has assigned, and the search filters only the set currently selected rather than all eleven — so something you cannot reach by browsing may still be identified by pasting it in. Searching by pasting a character is case-folded, so entering Å while the accented letters set is showing returns the row for å instead; name and code point are the dependable ways to search. And in input mode the Name column is a written name only where the character sits in one of the sets — otherwise it is assembled from the character's Unicode block, which is why an unfamiliar letter reads as Capital letter — Cyrillic, and why one from a block the tool does not list falls back to the bare word Unicode. The code point beside it is exact either way.

The whole thing runs in this browser tab. The character tables ship inside the page, nothing you paste is transmitted, and the tool keeps working with the network off. One consequence of reading text code point by code point is that a composed emoji comes apart: a flag splits into its two regional indicator letters, and a skin-toned or family emoji becomes a base character plus modifiers and zero-width joiners, each on its own row — and because regional indicators are outside the block table, those two rows arrive named only Unicode. That is an honest emoji code lookup, but it is not one line per emoji.

How to use it

  1. Choose what to show. Show starts on a character set. Switch it to the characters in my input when you already have the character and want to know what it is.
  2. Pick a set, or paste the text. Eleven sets are listed, from Arrows through to Spaces and invisibles. In input mode the box takes the text itself rather than a search term.
  3. Filter with the search box. In set mode, type part of a name, paste the character, or enter a code point such as U+2192. It filters the set on screen, not all eleven; leave the box empty for the whole set.
  4. Choose how much detail. Name, code point, HTML and CSS shows all five columns of a set. Name and code point only drops the HTML and CSS pair. Input mode adds a Times used column to either.
  5. Take what you need. There is no per-row copy button, so select the character in the table and copy it yourself. Copy output puts the whole table on the clipboard as CSV, headings included.

Processing & privacy

Runs on your device. Your file is processed directly in this browser.

Common use cases

Typing something your keyboard has no key for

Em dashes, degree signs, the per mille sign and the twenty-two rows of the currency set. Find the row, copy the character, paste it where it belongs.

Working out why text behaves oddly

Paste it in input mode and the invisibles become visible rows — a soft hyphen, a narrow no-break space, a zero width joiner that a copy from a web page brought along.

Writing markup that survives a bad save

The HTML column gives the reference to use instead of the literal character, so an encoding mistake later in the pipeline cannot mangle it.

Putting a symbol into a stylesheet

The CSS escape drops into a content property on a ::before rule, which is how an arrow or a bullet gets in without shipping an image.

Checking a name or a place spelling

The accented letters set covers the Latin range that names actually use, so ø, ß and ç can be copied rather than approximated.

Questions

Does anything I paste leave this tab?
No. The character sets are part of the page and the lookup runs in this browser tab, so nothing you paste is sent, logged or stored — which is also why the tool still works with no connection.
Can I search the whole of Unicode?
No. Browsing covers the eleven curated sets, and the search box filters only the set you have selected. For anything outside them, paste the character into input mode instead: any character you can paste gets a code point, an HTML reference and a CSS escape, even when its name comes back as a block description.
Why is the name sometimes vague?
Characters inside the curated sets carry written names. Anything else is described from its Unicode block, so an unfamiliar one reads as Number — Devanagari or Miscellaneous Symbols and Pictographs, and a character from a block the tool has no entry for is labelled Unicode and nothing more. Treat the Name column as a description rather than the official Unicode name; the code point is the part that is exact.
Why does one emoji produce several rows?
Input mode lists code points, and most expressive emoji are built from more than one. A flag is a pair of regional indicator letters; a skin-toned or multi-person emoji is a base character joined to modifiers by zero-width joiners. Each component is listed separately with its own code point.
What is in the HTML column?
A named reference such as © where the code point is one of the fifty-four everyday entities the tool knows, and a numeric reference otherwise — the up down arrow, which has no entry in that list, comes out as ↕. The numeric form is understood everywhere the named one is.
Does the CSS escape work as printed?
Usually, but not always. The column gives the bare escape, unpadded — \2192 for an arrow, \A9 for the copyright sign. CSS ends a hex escape at a space, so if the next thing in your string is a space or a hex digit you need to add a trailing space — content: "\2192 " — or the two run together into one wrong code point.
Why is a character drawn as an empty box?
The font your browser is using has no glyph for it. The data is fine: the code point, HTML reference and CSS escape on that row are still correct, and the character renders anywhere a font covering it is installed.
How does this differ from Whitespace Visualiser?
Whitespace Visualiser marks up a passage in place so you can see where the tabs and spaces fall. Character Map ignores position and reports the inventory instead — which characters are present, what each one is, and how many times it occurs.

Related tools