Character Map
Look up a symbol, copy it, and read its code point — or find out what is really in your text.
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
- 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.
- 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.
- 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.
- 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.
- 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?
Can I search the whole of Unicode?
Why is the name sometimes vague?
Why does one emoji produce several rows?
What is in the HTML column?
Does the CSS escape work as printed?
Why is a character drawn as an empty box?
How does this differ from Whitespace Visualiser?
Related tools
- Word Counter — Count words, characters, sentences and reading time.
- Case Converter — Switch between upper, lower, title, camel and snake case.
- Remove Line Breaks — Collapse hard wraps back into flowing paragraphs.
- Remove Extra Spaces — Normalise double spaces and stray whitespace.
- Sort Lines — Sort lines alphabetically, numerically or randomly.
- Remove Duplicate Lines — Delete repeated lines from a list.