How Unicode and Emoji Work

Eight concepts that explain almost every surprising thing an emoji does. Each one has a real example you can open in the Inspector and take apart yourself, rather than a diagram to take on trust.

What is a code point?

A code point is the number Unicode assigns to one character, written U+ followed by hexadecimal digits.

Every character in the standard has exactly one, and it never changes. A code point is not a byte and not a keystroke — it is the character's identity, independent of how it is stored or drawn.

Two characters, two code points: U+0041 and U+1F602.
A😂

Full definition: Code point

What is a grapheme cluster?

A grapheme cluster is the group of code points a reader perceives as a single character.

This is why character counts disagree. A family emoji looks like one character, is seven code points, and is eleven UTF-16 units. Software that splits text by code point will cut an emoji in half; splitting by grapheme cluster does not.

1 grapheme cluster, 7 code points, 11 UTF-16 units.
👨‍👩‍👧‍👦

Full definition: Grapheme cluster

UTF-8 and UTF-16

These are two ways of storing code points as bytes. UTF-8 uses one to four bytes per code point; UTF-16 uses one or two 16-bit units.

The web is overwhelmingly UTF-8. JavaScript strings are UTF-16, which is why String.length reports 2 for a single emoji — it is counting units, not characters.

4 UTF-8 bytes, 2 UTF-16 units, 1 code point, 1 grapheme.
😂

Full definition: UTF-8

What is a zero-width joiner?

ZWJ (U+200D) is an invisible character that asks the font to merge the emoji on either side of it into one picture.

If the font has a combined glyph, you see one image. If it does not, you see the parts side by side. Neither result is a bug — the fallback is designed into the standard.

Man + ZWJ + laptop, drawn as one glyph where supported.
👨‍💻

Full definition: Zero width joiner (ZWJ)

What is a variation selector?

VS15 and VS16 request the text or emoji appearance of a character that has both forms.

Older symbols such as ❤ predate emoji and can be drawn either way. Adding U+FE0F asks for colour; U+FE0E asks for monochrome. Only characters Unicode lists as having both forms respond to this.

The same base character, once bare and once with VS16.
❤❤️

Full definition: Variation selector

How do flags work?

A flag is two regional indicator letters matching an ISO region code — there is no single flag code point.

That is why an unsupported flag shows as two letters: the device is drawing exactly what is there, having no combined artwork for the pair.

Regional indicators K and R.
🇰🇷

Full definition: Regional indicator

How do skin tones work?

A modifier character (U+1F3FB–U+1F3FF) follows a supported emoji and selects one of five tones.

Only around 330 entries accept one. Applying a modifier to anything else leaves the base emoji followed by a visible colour swatch, which is almost never what was intended.

Waving hand plus the medium tone modifier.
👋🏽

Full definition: Skin tone modifier

What is a combining character?

A combining character attaches to the character before it instead of taking its own space.

Accents work this way, and so does "glitch" text — which is simply dozens of combining marks stacked on ordinary letters. Screen readers announce every one of them.

Letter e followed by a combining acute accent.

Full definition: Combining character

Where to go next

Written by SymbolTap Editorial from the Unicode standard. Last reviewed 31 July 2026.

Frequently asked questions

Do I need to understand this to use emojis?

No. This is for the moments when something goes wrong — an emoji splits into pieces, a character count disagrees with a platform, or a string will not match. Each concept here explains one of those.

Is this material accurate to the current standard?

It describes Unicode 17.0.0 and CLDR 48.2.0, which is the data this site is built from. Concepts like code points and ZWJ have been stable for many releases.

Can I use these examples in a class?

Yes. The pages are free to read and print, and the Inspector needs no sign-up. Category and glossary pages have print styles that drop navigation and buttons.