Emoji Picker & Unicode Lookup
Browse, search, and copy emojis โ with Unicode codepoint, HTML entity, CSS content, JS escape, and UTF-8 bytes
210 emojis โ click any to see Unicode details
Click any emoji above to see its Unicode codepoint, HTML entity, CSS content value, JavaScript escape, and UTF-8 bytes.
You need the checkmark emoji for a CLI toolโs success message โ but not the green one (โ
U+2705), the plain one (โ U+2713). You Google โcheckmark unicodeโ and get a list of 8 variations with no visual comparison. Or you need the CSS content value for a custom bullet point and canโt remember if itโs "\2022" or "\2023". You need one place that shows the emoji, its codepoint, HTML entity, CSS value, and JS escape โ all at once.
Why This Tool (Not the OS Emoji Picker)
Your OS emoji picker (Win+. or Cmd+Ctrl+Space) copies the emoji but gives you zero technical data. This tool shows the Unicode codepoint, HTML entity, CSS content value, JavaScript escape, and UTF-8 hex bytes for every emoji โ exactly what developers need when embedding emojis in code, HTML, or CSS. Everything runs in your browser; no data is sent anywhere.
What Is This Tool?
The Emoji Picker & Unicode Lookup lets you browse and search 210+ carefully curated emojis across 8 categories โ Smileys, Animals, Food, Travel, Activities, Objects, Symbols, and Flags. Click any emoji to instantly copy it and inspect its complete Unicode technical information:
- Unicode Codepoint โ e.g.
U+1F600 - HTML Entity โ e.g.
😀 - CSS Content Value โ e.g.
"\1F600" - JavaScript ES6 Escape โ e.g.
\u{1F600} - UTF-8 Hex Bytes โ e.g.
F0 9F 98 80
All processing happens in your browser. Nothing is uploaded to any server.
Understanding Unicode Codepoints
Every character in the Unicode standard is assigned a unique number called a codepoint. Codepoints are written as U+ followed by a hexadecimal number:
| Emoji | Codepoint | Name |
|---|---|---|
| ๐ | U+1F600 | GRINNING FACE |
| โค๏ธ | U+2764 U+FE0F | HEAVY BLACK HEART + VARIATION SELECTOR |
| ๐บ๐ธ | U+1F1FA U+1F1F8 | REGIONAL INDICATOR U + REGIONAL INDICATOR S |
Emojis can be a single codepoint like ๐ (U+1F600), or a sequence of codepoints joined together. The variation selector U+FE0F tells renderers to display a character as an emoji rather than plain text. Country flags like ๐บ๐ธ combine two Regional Indicator symbols.
Unicode is organized into planes. The Basic Multilingual Plane (BMP, U+0000โU+FFFF) covers most common characters. Emojis mostly live in the Supplementary Multilingual Plane (SMP, U+10000โU+1FFFF), which requires 4 bytes in UTF-8.
HTML Entities for Emojis
You can embed emojis in HTML using numeric character references in hexadecimal form:
<!-- Grinning face ๐ -->
<span>😀</span>
<!-- Red heart โค๏ธ โ includes variation selector for emoji rendering -->
<span>❤️</span>
<!-- Coffee โ -->
<span>☕</span>
The format &#xHEXCODE; is supported in all modern browsers. Named HTML entities like ♥ exist only for a small set of characters โ emojis require numeric references.
HTML entities are useful when you:
- Need to include an emoji in a file with non-UTF-8 encoding
- Want to avoid copy-paste encoding issues in source code
- Are embedding emoji in XML documents that require escaped characters
CSS Content Property with Emojis
To insert emojis via CSS pseudo-elements, use the content property with the Unicode escape \HEXCODE:
/* Single emoji (๐ U+1F600) */
.icon::before {
content: "\1F600";
}
/* Multiple codepoints (โค๏ธ = U+2764 + U+FE0F) */
.heart::before {
content: "\2764\FE0F";
}
/* US flag (๐บ๐ธ = U+1F1FA + U+1F1F8) */
.us-flag::before {
content: "\1F1FA\1F1F8";
}
Unlike HTML entities, CSS unicode escapes use a backslash \ prefix with no semicolon. Each codepoint is written as \HEXCODE with a space or the next character automatically terminating it.
Note: Emoji rendering in CSS content depends on the OS and font stack. On most modern systems with emoji fonts (Noto Emoji, Apple Color Emoji, Segoe UI Emoji), this works as expected. Add font-family: "Noto Emoji", "Apple Color Emoji", "Segoe UI Emoji", sans-serif; to guarantee emoji rendering.
JavaScript Strings and Emoji Escapes
JavaScript uses UTF-16 internally. Emojis in the Supplementary Multilingual Plane (U+10000+) are represented as surrogate pairs โ two 16-bit code units. This explains why "๐".length === 2 in JavaScript even though itโs one visible character.
The modern \u{HEXCODE} escape (ES2015+) handles any codepoint cleanly:
// ES6 unicode escape โ recommended
const grin = "\u{1F600}"; // ๐
const heart = "\u{2764}\u{FE0F}"; // โค๏ธ
const usFlag = "\u{1F1FA}\u{1F1F8}"; // ๐บ๐ธ
console.log(grin.length); // 2 (surrogate pair, but renders correctly)
console.log([...grin].length); // 1 (spread iterates by codepoint)
console.log(grin.codePointAt(0)); // 128512 (0x1F600)
The older \uXXXX syntax only handles the BMP (U+0000โU+FFFF). For supplementary characters youโd need surrogate pairs like "\uD83D\uDE00" for ๐ โ the \u{1F600} form is far cleaner.
Iterating Over Emojis Correctly
const text = "Hello ๐!";
// Wrong โ splits surrogate pairs
for (let i = 0; i < text.length; i++) {
console.log(text[i]); // Outputs garbage for ๐
}
// Correct โ iterates by Unicode codepoint
for (const char of text) {
console.log(char); // 'H', 'e', 'l', 'l', 'o', ' ', '๐', '!'
}
// Also correct โ spread into array
const chars = [...text]; // ['H', 'e', 'l', 'l', 'o', ' ', '๐', '!']
UTF-8 Byte Encoding
UTF-8 is the dominant encoding for web content. Itโs variable-width: each Unicode codepoint uses 1โ4 bytes.
| Codepoint Range | Bytes | Byte Pattern |
|---|---|---|
| U+0000โU+007F | 1 | 0xxxxxxx |
| U+0080โU+07FF | 2 | 110xxxxx 10xxxxxx |
| U+0800โU+FFFF | 3 | 1110xxxx 10xxxxxx 10xxxxxx |
| U+10000โU+10FFFF | 4 | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx |
Most emojis are in the Supplementary Multilingual Plane (U+10000+) and require 4 bytes. For example, ๐ (U+1F600):
U+1F600 = 0001 1111 0110 0000 0000 (21 bits)
Byte 1: 11110_000 = F0 (top 3 bits: 000)
Byte 2: 10_011111 = 9F (next 6 bits: 011111)
Byte 3: 10_011000 = 98 (next 6 bits: 011000)
Byte 4: 10_000000 = 80 (bottom 6 bits: 000000)
UTF-8: F0 9F 98 80
Some simpler characters use fewer bytes โ โ (U+2615) uses 3 bytes: E2 98 95.
The UTF-8 bytes shown by this tool are useful for:
- Debugging encoding issues in databases, APIs, or file systems
- Writing binary protocols that embed emoji
- Verifying character encoding in byte buffers
- Understanding why
Buffer.byteLength("๐")returns 4 in Node.js
Variation Selectors and ZWJ Sequences
Many emojis consist of multiple codepoints:
Variation Selector-16 (U+FE0F): Appended to certain characters to force emoji-style rendering. For example, โ (U+2708) renders as text in some contexts; โ๏ธ (U+2708 + U+FE0F) always renders as a colorful emoji.
Zero Width Joiner (ZWJ, U+200D): Combines emojis into a single glyph on supported platforms. For example, ๐จโ๐ป is ๐จ + ZWJ + ๐ป (man + zero width joiner + laptop).
Regional Indicator Symbols: Flag emojis like ๐ฏ๐ต are two Regional Indicator letters: ๐ฏ (U+1F1EF) + ๐ต (U+1F1F5).
When this tool shows multiple codepoints (e.g., U+2708 U+FE0F), each one is listed individually so you can use them independently or together in your HTML, CSS, or JavaScript.
Emoji in URLs and HTTP
Emojis must be percent-encoded in URLs. The emoji ๐ (UTF-8: F0 9F 98 80) becomes %F0%9F%98%80:
https://example.com/search?q=%F0%9F%98%80
In modern APIs, you can typically use the raw emoji in JSON bodies (UTF-8 encoded), but URL query parameters and path segments require percent-encoding.
Frequently Asked Questions
Why does "๐".length equal 2 in JavaScript?
JavaScript strings are UTF-16. Emojis above U+FFFF (most modern emojis) are encoded as surrogate pairs โ two 16-bit code units โ so .length counts code units, not visible characters. Use [...str].length or the Intl.Segmenter API to count actual grapheme clusters.
What is the difference between \u{1F600} and \uD83D\uDE00 in JavaScript?
Both represent ๐ (U+1F600). \u{XXXX} (ES6+) is the clean, readable form that takes the actual codepoint. \uD83D\uDE00 is the older surrogate pair encoding in UTF-16 โ \uD83D is the high surrogate and \uDE00 is the low surrogate. Always use \u{XXXX} in new code.
Can I use emojis in CSS class names or IDs? While technically valid in CSS selectors if properly escaped, itโs not recommended. Stick to ASCII for class names and IDs to avoid encoding issues across different tools.
Why do emojis look different on different platforms? Each platform (Apple, Google, Microsoft, etc.) designs its own emoji glyphs. The Unicode standard only specifies the characterโs name and codepoint, not its visual appearance. U+1F600 is always โGRINNING FACEโ but how itโs drawn is up to the vendor.
Does this tool work offline? Yes. The entire emoji dataset is embedded in the JavaScript bundle. After the initial page load, no network requests are made.