Emoji Cheat Sheet
Common emoji grouped by category — emotion, gesture, animals, food, travel, activities and symbols — for quick meaning lookup and copy.
How It Works
Emoji are a class of Unicode code points (e.g. U+1F600 grinning face), not images but characters — so they render with a font and participate in sorting and search. A base emoji is one code point but is often composed of several.
Composition uses two mechanisms: skin-tone modifiers (U+1F3FB–1F3FF) layered onto human emoji, and the zero-width joiner (ZWJ, U+200D) that glues several emoji into families or professions. Different platforms render the same code point differently, so one emoji looks unlike across systems.
When to Use This Table
This table is for picking emoji by category, or finding a symbol by name or meaning. It is organised into faces, gestures, symbols, flags, animals and food, each with a representative emoji and typical use, which is faster than paging through the whole Unicode chart.
When not to consult it: you need exact code point lookup or font-compatibility decisions. Emoji rendering is highly platform dependent (Windows may show a flag as two letters; macOS, iOS and Android each have their own style), so this table offers no cross-platform rendering guarantee.
Rule of thumb: decide by purpose. For UI icons consistency matters, so fix one style and never mix platforms; for social text expressiveness matters, so pick by semantic group.
Mind the variation selector U+FE0F: the same code point can render differently with or without it — the difference between ❤️ and ❤ is exactly that. In storage or comparison this invisible character creates the trap of strings that look identical but are not equal.
Boundaries and Common Pitfalls
The variation selector makes identical-looking strings unequal
U+FE0F is an invisible variation selector that switches some emoji to their colour presentation. A string with it and one without may look identical to the eye but compare unequal with ===, so database dedup sees two rows and URL parameters or cache keys diverge. Fix: normalise before storage (strip U+FE0F or always append it), or normalise before comparing.
Flag emoji only accept ISO 3166-1 alpha-2
A flag is two regional indicator code points (U+1F1E6 onward, mapping A–Z), and it requires the two-letter alpha-2 code. Alpha-3 (CHN) or numeric (156) cannot be used directly and must be converted first. Windows may render the result as two letters because the platform lacks a flag font — that is not an encoding error, and production should use SVG assets instead.
One concept has many emoji, so search must handle aliases
Laughter maps to 😀😄😅😆🤣😂🙂🙃😉😌, and each platform attaches its own keywords (official Unicode names, CLDR short names, vendor-specific labels). An emoji picker must index several alias sets and normalise them, otherwise searching for happy, haha or smile never lands on the same result — user search habits differ greatly from Unicode naming.
How This Relates to Neighbours
For code points and official Unicode names, use the in-site ASCII and character-encoding pages; this one is organised semantically and is not an authoritative code point reference.
Deciding whether an emoji renders on a target platform requires font coverage data, which this table does not provide; in engineering contexts prefer an SVG icon set.
For stable interface icons (buttons, menus, status markers) a vector icon library is more controllable — cross-platform emoji differences make emoji unsuitable for formal UI.
If the goal is generating social media content or processing text, this page is a reasonable vocabulary reference, but layout and platform limits need separate confirmation.
Practical Snippet
Key points: (1) U+FE0F makes visually identical emoji strictly unequal, so strip it or always append it before storage, otherwise dedup and cache keys diverge; (2) flags can only be built from two-letter alpha-2 — convert alpha-3 or numeric codes first, and Windows may render two letters due to a missing font rather than an encoding error; (3) any length limit must state whether it counts UTF-16 code units, code points or UTF-8 bytes; (4) status icons in real UI should use cross-platform-stable symbols like ✔⚠✖ instead of relying on an emoji font.
// ① 变体选择符 U+FE0F:肉眼相同但不相等
const a = '❤️' // ❤️ 带变体选择符
const b = '❤' // ❤ 不带
console.log(a === b) // false ← 坑
console.log(a.normalize('NFC') === b.normalize('NFC')) // 仍 false(FE0F 不被 NFC 去除)
// 规范化:入库/比较前统一去掉 U+FE0F
const stripVS = s => s.replace(/️/g, '')
console.log(stripVS(a) === b) // true ✅
// ② 旗帜只能由 alpha-2 生成
const flagOf = (alpha2) => {
if (alpha2.length !== 2) throw new Error('need alpha-2')
const base = 0x1f1e6 // 'A' 的 regional indicator
return String.fromCodePoint(
base + (alpha2.toUpperCase().charCodeAt(0) - 65),
base + (alpha2.toUpperCase().charCodeAt(1) - 65),
)
}
console.log(flagOf('cn'), flagOf('de')) // 🇨🇳 🇩🇪
// ③ 量一下「字符数 vs 码点数 vs 字节数」
const s = 'a中🛠️'
console.log(s.length) // 4 UTF-16 计数单位
console.log([...s].length) // 3 码点数
console.log(new TextEncoder().encode(s).length) // 8 UTF-8 字节数
// ⚠️ 限制字符串长度时必须明确用哪一种口径
// ④ 稳定 UI 图标:别依赖 emoji 字体
const ICON = { ok: '\\u2714', warn: '\\u26A0', err: '\\u2716' } // ✔ ⚠ ✖
console.log(ICON.ok, ICON.warn, ICON.err) // 跨平台呈现更一致Practical Notes
- Emoji are multi-code-point sequences, so length is always wrong👨👩👧 is three people plus two zero-width joiners, and 🇨🇳 is a pair of regional indicators. string.length counts code units, not characters, so limits and truncation split emoji apart. Iterate with Array.from or Intl.Segmenter over grapheme clusters.
- The same emoji looks different on every platformUnicode defines meaning; the glyph comes from the system font. Do not let platform differences mislead design reviews or screenshot comparisons. When pixel-identical output matters, ship a drawn icon rather than an emoji.
- Skin-tone modifiers are optional extra code points👍 and 👍🏽 are a base emoji plus a modifier. Deduplication or search matching that does not strip modifiers treats one expression as two distinct values.
Data Sources
- Unicode Emoji (UTS #51)
- Unicode Standard Annex #29 (grapheme clusters)
Codes, names and definitions above come from public specifications; we claim no originality over the specification data itself. The arrangement, Chinese annotations and practical notes on this page are written by us.
| Category | Example Emoji | Typical Use |
|---|---|---|
| Emotion & Feeling | 😀 😂 😍 😢 😡 🤔 | Express joy, anger, love, thought and other emotions |
| Gesture & People | 👍 👏 🤝 🙏 👋 💪 | Like, thank, greet, cheer on |
| Animals & Nature | 🐶 🐱 🌲 🌸 🌞 🔥 | Pets, plants, weather, natural phenomena |
| Food & Drink | 🍎 🍔 🍕 ☕ 🍺 🍰 | Dining, cooking, celebration |
| Travel & Places | ✈️ 🚗 🏠 🌍 🗺️ 🏔️ | Transport, places, travel |
| Activities & Sports | ⚽ 🏀 🎮 🎵 🎉 🎯 | Sports, games, parties, celebration |
| Objects & Symbols | 💡 🔔 📱 💻 ⏰ 🔧 | Daily objects, devices, tools |
| Hearts | ❤️ 💛 💚 💙 💜 🖤 | Love, support, emotional expression |
| Arrows & Direction | ⬆️ ⬇️ ⬅️ ➡️ ↩️ 🔄 | Direction, navigation, flow |
| Numbers & Letters | 0️⃣ 1️⃣ 2️⃣ 3️⃣ 4️⃣ 9️⃣ | Counting, order, numbering |
| Money & Currency | 💰 💵 💶 💷 💴 💳 | Money, price, payment |
| Punctuation & Shapes | ❗ ❓ ⭐ 🔶 🔺 ✅ | Emphasis, marking, status |
Frequently Asked Questions
Why do 😀 and 🙃 look different across platforms?
Emoji are Unicode characters, but each platform (Apple/Google/Microsoft) ships its own emoji font, so appearance varies. The codepoint is identical; the visual difference is expected. For pixel-consistent look, use an image or SVG glyph instead of system emoji.
How do I set skin tone or gender on an emoji?
Unicode provides modifiers (Fitzpatrick skin tones U+1F3FB–U+1F3FF) and Zero-Width Joiner (ZWJ) to combine gender/profession emoji, e.g. 👋🏻👋🏽 or the 👨👩👧 family. Not every platform supports all sequences.
Do emoji need escaping in code or URLs?
Emoji are valid Unicode and can be used directly in JSON/HTML (use UTF-8). When placing them in a URL, percent-encode them (see the "URL Encoding" reference) to avoid issues on legacy gateways.
Do emoji affect SEO or readability?
A moderate use of emoji in titles or body can lift click-through, but search engines rely on text. Avoid stuffing, which hurts professionalism and screen-reader experience (some readers spell out each emoji name).