Emoji Search & Copy
ReferenceBrowse and search emoji by keyword across multiple languages, then copy in five formats — glyph, codepoint, HTML entity, JS escape, and CSS escape.
Remote URLs are not fetched; paste your JSON directly.
On this page
What is an emoji search and copy tool?#
Emojis look like single characters, but under the hood most of them are not. The grinning face 😀 is one Unicode code point; the red heart ❤️ is two (a base heart plus a variation selector that forces it to render as the colorful emoji rather than a plain text glyph); the flag of China 🇨🇳 is two regional-indicator letters glued together. When you need the emoji itself that does not matter — you just paste the glyph. But the moment you need its code point for documentation, its HTML entity for a web page, its JavaScript escape for a string literal, or its CSS escape for a content: rule, the multi-code-point ones break naive tools that split on UTF-16 units and produce corrupted surrogate halves.
This page is a searchable emoji catalog that handles all of that correctly. You search by name or keyword in your language, browse nine categories, click any emoji, and copy it in one of five formats — glyph, code point, HTML, JavaScript, or CSS — each generated by walking the glyph code point by code point, so ❤️ and 🇨🇳 come out right.
How to use it#
The layout is a sidebar (search + categories) on the left and a grid + detail panel on the right.
- Find the emoji. Either type into the search box or click a category in the sidebar (Smiley, People, Animals, Food, Activity, Travel, Objects, Symbols, Flags). Search matches the name and keywords in your language, and also the English name and the code point — so typing
heartor1F600works in any locale. - Click an emoji in the grid. The detail panel below the grid fills in with the glyph, its localized name, and its Unicode version.
- Copy in the format you need. The detail panel offers five copy buttons:
- Emoji — the glyph itself, for chat, docs, or a design tool.
- Code point — the
U+...form (space-joined when there are several), for documentation or a Unicode lookup. - HTML — a decimal numeric character reference, for pasting into raw HTML.
- JS — an ES2015 brace escape, for a JavaScript or TypeScript string literal.
- CSS — a CSS escape, for use inside
content:or an::afterrule.
Key features#
- Five copy formats, one click each. No manual conversion between glyph, code point, and the HTML/JS/CSS escape forms — every emoji is available in all five.
- Correct on multi-code-point emoji. The escapes are generated by iterating the glyph by Unicode code point, not by UTF-16 unit. A red heart ❤️ produces a clean
\u{2764}\u{FE0F}, not a garbled surrogate pair. - Locale-aware search that still works across languages. Names and keywords are localized, but English is always indexed too, plus the raw code point — so
smile, the localized word, or1F600all reach the same emoji. - Nine categories. The standard Unicode emoji categories, each with a representative glyph in the sidebar, so you can browse when you do not have a search term.
- Keyboard and screen-reader friendly. The grid is a listbox with arrow-key navigation, and the detail panel is an
aria-liveregion that announces the name and code point as you move.
Worked example#
Copy the red heart ❤️ in all five formats. Click it in the Symbols category (or search heart), and the detail panel shows:
- Emoji:
❤️ - Code point:
U+2764 U+FE0F - HTML:
❤️ - JS:
\u{2764}\u{FE0F} - CSS:
\2764 \FE0F
Notice there are two code points, not one. U+2764 is the base heart (a plain text character dating back to before emoji existed); U+FE0F is the variation selector-16, a zero-width code point whose only job is to tell the renderer “display the preceding character in its colorful emoji form, not as a black text glyph.” Drop the selector and some platforms show a text-style heart; keep it and you get the red emoji. Every format here preserves both code points, which is why pasting the HTML entity into a page still renders the colored heart.
Contrast that with the grinning face 😀, which is a single code point (U+1F600). Its forms collapse to 😀, \u{1F600}, and \1F600 — one escape each, because there is only one code point to encode. The difference between the two is exactly why a tool that walks code points (rather than assuming one glyph equals one code point) matters.
FAQ#
Which format should I copy for what I’m doing?#
For a chat message, a document, or a design mockup, copy Emoji — the glyph is universal. For a technical document or a bug report referencing a specific character, copy Code point (U+1F600). For raw HTML source, HTML (😀) is safest because it cannot be mangled by encoding issues. For a JavaScript or TypeScript string, JS (\u{1F600}). For a CSS content: value, CSS (\1F600).
Why does the red heart show two code points?#
Because ❤️ is a sequence, not a single character. The base code point U+2764 is the text heart; U+FE0F is a variation selector that requests the emoji presentation style. Some emoji go further and use a zero-width joiner to combine several glyphs into one (a family emoji is built this way), and flags are always a pair of regional-indicator letters. This tool walks the glyph by code point before generating escapes, so every code point in the sequence is preserved.
Why \u{1F600} and not 😀?#
Both are valid JavaScript representations of the same emoji, but they work differently. 😀 is a surrogate pair — two UTF-16 code units that only mean something together, the older way to encode characters above U+FFFF. \u{1F600} is the ES2015 code-point escape, which writes the actual code point directly and is far easier to read. This tool emits the code-point form because it is unambiguous and modern; if you need the surrogate form, the code-point value tells you exactly what to convert.
The emoji looks different on my phone than on my computer — why?#
Unicode defines what each emoji means, but each platform (Apple, Google, Microsoft, Samsung) draws its own artwork for it, so the same code point renders with a different picture on each. The code point, the HTML entity, and every escape are identical across platforms — only the pixels differ. If exact visual consistency matters (a brand campaign, say), you would ship your own emoji image set rather than rely on the platform font; for most uses, the platform’s native rendering is what you want.