Lexicon

The vocabulary behind every character on this site, in plain language. Terms link to each other — start anywhere.

Character

The abstract unit of text: "Latin capital letter A", "red heart", "em dash". A character is an idea, not a picture — what it looks like on your screen is the job of a glyph, and which number represents it is the job of a codepoint.

Glyph

The visible shape a font draws for a character. One character can have many glyphs — the dollar sign renders with one stroke or two depending on the typeface, yet both are the same codepoint. Emoji take this further: every platform draws its own artwork for the same underlying character.

Codepoint

The number Unicode assigns to a character, written U+ followed by hexadecimal digits: U+0041 for A, U+1F49C for the purple heart. Unicode has room for 1,114,112 codepoints, organised into planes and blocks. On this site, every symbol page shows its codepoint in the technical reference.

Hex (hexadecimal)

Base-16 notation — digits 0–9 plus A–F — used almost everywhere characters are discussed. Codepoints (U+1F600), HTML entities (😀), and UTF-8 byte sequences (F0 9F 98 80) are all conventionally written in hex because it maps neatly onto bytes: two hex digits per byte.

Plane

Unicode's largest subdivision: 17 slabs of 65,536 codepoints each. Plane 0, the Basic Multilingual Plane (BMP), holds most living scripts and everyday symbols. Plane 1, the Supplementary Multilingual Plane (SMP), holds historic scripts, notation systems — and nearly all emoji, which is why emoji codepoints run five digits (U+1F600 and up).

Block

A named, contiguous range of codepoints grouped by purpose: "Currency Symbols", "Miscellaneous Symbols and Pictographs", "Adlam". Blocks are organisational, not functional — a character's behaviour comes from its properties, not from which block it lives in. Every symbol page here names the block its character belongs to.

UTF-8 / UTF-16

Encodings: rules for turning a codepoint into actual bytes. UTF-8 uses one to four bytes per character and dominates the web; UTF-16 uses two-byte units and pairs them up (a surrogate pair) for anything beyond the BMP. Same character, same codepoint, different bytes — most mojibake is text decoded with the wrong one of these.

HTML entity

A way to write any character in plain-ASCII HTML source. Numeric entities reference the codepoint directly — ❤ (hex) or ❤ (decimal) — while named entities like ♥ exist for a few hundred common characters. Useful when your editor, keyboard or toolchain can't handle the character itself.

Variation selector

An invisible character that asks for a specific presentation of the character before it. VS16 (U+FE0F) requests colourful emoji rendering; VS15 (U+FE0E) requests plain text rendering. The red heart is the classic case: U+2764 alone is a black dingbat, and only U+2764 + VS16 becomes the red emoji. When a heart "arrives black", the selector got lost in transit.

ZWJ (zero-width joiner)

An invisible character (U+200D) that glues emoji together into a single rendered image. Heart on Fire is a red heart, a ZWJ and a flame; the family and profession emoji are longer chains. On software that doesn't know a particular recipe, the sequence falls apart into its visible ingredients — which is the tell that you're looking at a composite.

Skin tone modifier

Five characters (U+1F3FB–U+1F3FF), based on the Fitzpatrick dermatology scale, that recolour the human-figure emoji immediately before them. A thumbs-up with a tone modifier is technically two codepoints rendering as one image. Every toned variant gets its own page on this site, linked from its base emoji.

Fully-qualified emoji

An emoji sequence spelled exactly as the Unicode emoji data recommends, including every required variation selector. Fully-qualified sequences are what keyboards insert and what render most reliably; minimally-qualified variants (missing a VS16) usually still work but can fall back to text presentation on stricter platforms.

Combining character

A character that attaches to the one before it instead of standing alone: accents (é can be e + U+0301), enclosing circles, strike-through overlays. What you perceive as one letter may be several codepoints — see grapheme cluster — and this is exactly how Zalgo text stacks its chaos.

Grapheme cluster

What a reader would call "one character": the unit cursors jump over and backspace deletes. A grapheme cluster can be a single codepoint or many — a ZWJ family emoji is one grapheme built from seven codepoints. It's why "string length" is a surprisingly philosophical question in programming.

Surrogate pair

UTF-16's trick for reaching beyond the BMP: two reserved 16-bit units that combine to address one supplementary codepoint. Relevant in JavaScript, where "💜".length is 2 — the language counts UTF-16 units, not characters. The escape \u{1F49C} sidesteps the pair; \uD83D\uDC9C spells it out.

Dingbat

A typographic ornament — printer's decoration like ✂, ✈ or ❤ — from the era of metal type. Many classic dingbats were encoded in Unicode's Dingbats block in 1993 and later drafted into emoji service via variation selectors, which is why some emoji are decades older than emoji themselves.