
Free Developer Tool - runs 100% in your browser
Character & Emoji Finder
Scroll down to learn more about this tool
Find any emoji or symbol and copy it in one click
This character and emoji finder searches every emoji in Emoji 17.0 and more than six thousand hand-picked Unicode symbols: arrows, math operators, currency signs, check marks, box-drawing lines, accented letters and more. Click a symbol to copy it, or switch the click mode to collect several into one string. The data loads once and everything else happens in your browser.
The search box understands more than names:
- Names and everyday words -
heart,tick,degree,bullet,rupee. Emoji also match their keywords, solaughfinds 😂 andbyefinds 👋. - Shortcodes -
:thumbsup:,:rocket:,:white_check_mark:, as used on GitHub, Slack and Discord. - Code points -
U+2713,0x1F600,→or a bare2192. - HTML entities -
→, ,★. - The symbol itself - paste
™or🫠to find out what it is called and how to type it in code.
If a symbol is not in the curated sets, the Search all Unicode link downloads the names of all named code points (roughly 40,000 of them, excluding the CJK ideographs, which are numbered rather than named) and searches those too.
The character sets
The Characters tab groups symbols the way people actually look for them, not the way the Unicode block list orders them. Popular collects the hundred-odd symbols people copy most. The other sets are Arrows, Math, Currency, Punctuation, Spaces & invisible,Accented letters, Greek, Cyrillic, Superscript & subscript,Numbers & fractions, Shapes, Box drawing, Misc symbols,Dingbats, Keyboard & technical, Letterlike, Fancy text letters,Music, Chess, cards & dice, Braille and plain ASCII.
Every format a developer needs
Select a symbol and the side panel shows it in each notation you are likely to paste somewhere. Here is what each one is for, using the waving hand 👋 (U+1F44B) as the example:
- HTML entity -
👋, or a named entity such as→where one exists. Safe in any HTML file whatever its encoding. - HTML decimal -
👋. Same thing in base 10, still common in older CMS templates. - CSS -
\1F44B, forcontent: "\1F44B";in a::beforerule. - JavaScript -
\u{1F44B}. The braces are ES2015 syntax. Without them,\utakes exactly four hex digits and cannot reach past U+FFFF. - JSON, Java and C# -
👋. These languages escape UTF-16 code units, so characters above U+FFFF are written as a surrogate pair. - Python -
\U0001F44B: a capital U followed by eight hex digits. - UTF-8 bytes -
F0 9F 91 8B. Useful when a hex dump, a database column or a byte-length limit is involved. - URL encoded -
%F0%9F%91%8B, for query strings. The URL encoder handles whole strings.
Why "👋🏽".length is 4 in JavaScript
A string can be counted three ways, and they rarely agree. Graphemes are what a reader sees as one character. Code points are Unicode's units: 👋🏽 is two of them, the hand followed by a skin-tone modifier. UTF-16 code units are what JavaScript's.length counts: each of those two code points sits above U+FFFF and needs a surrogate pair, so the total is four. A family emoji built with zero-width joiners can be one grapheme and eleven code units. The Inspect text tab shows all three counts plus the UTF-8 byte size, which is the number that matters for a VARCHAR limit or an SMS segment.
Invisible characters, and how to catch them
Some of the most useful entries in Unicode cannot be seen. The Spaces & invisible set labels each one with its short alias, so you can see what you are copying:
- NBSP (U+00A0) - a space that never breaks a line. Keeps
10 kmtogether. - ZWSP (U+200B) - a zero-width space. It marks a place where a long word may break, and it is also the classic culprit when two strings that look identical fail to compare equal.
- ZWJ (U+200D) - the zero-width joiner that glues emoji into sequences like 👩💻 and 🏳️🌈.
- BOM (U+FEFF) - the byte-order mark some Windows editors add to the start of a file. It can break shebang lines, CSV headers and JSON parsers.
- Bidi controls (U+202A to U+202E, U+2066 to U+2069) - these reorder how text is displayed. The "Trojan Source" attack used them to make code display differently from how it compiles.
Paste suspicious text into Inspect text and every invisible or control character is flagged in the breakdown.
Skin tones and emoji sequences
The swatches next to the tabs apply one of the five Fitzpatrick skin-tone modifiers to every emoji that supports them, and the finder remembers your choice. The modifier is a separate code point placed after the base emoji, which is why toned emoji are longer strings. Multi-person emoji such as 🧑🤝🧑 use the same tone for everyone.
Why some symbols show up as empty boxes
A blank box, nicknamed tofu, means no font on your device has a glyph for that code point. The character itself is fine: copy it and it will display wherever a suitable font exists. Emoji are tied to operating system updates, so the side panel shows each emoji's version. Anything from Emoji 16.0 or 17.0 may show as tofu on phones and PCs that have not been updated recently. For symbols, the Noto fonts from Google cover almost every block.
A warning about "fancy text" letters
The bold, italic, script and double-struck letters under Fancy text letters are popular for social-media bios, and they are not styled text. They come from the Mathematical Alphanumeric Symbols block and exist so that equations can tell variables apart. A screen reader may read 𝐇𝐞𝐥𝐥𝐨 as "mathematical bold capital H, mathematical bold small e…". Search engines may not match them to normal letters, and many fonts lack them. Use them as decoration, not for anything people need to read or search.
Related tools
To escape a whole document rather than one character, use theHTML entity encoder. The regex testeris handy for checking a \p{Emoji} or [ -] pattern against real text.
