Unicode -> Emoji

Emoji

Emojis look simple when rendered in the browser, but each emoji is represented by one or more Unicode code points. This page shows how a basic emoji is represented, and how more complex emojis can be composed from multiple Unicode values.



The Anatomy of an Emoji

A Unicode emoji has a name, a code point, and one or more ways to represent it in code. The code point identifies the character in the Unicode standard.

Here are some example emojis:

😁 😂 😃 😄 😅 😆 😉 😊 😋 😌 😍 😏 😒 😓

Character Name Code point UTF-8 UTF-16 How to print it from code
😁 Grinning Face With Smiling Eyes U+1F601 F0 9F 98 81 D83D DE01 Trace.WriteLine("\uD83D\uDE01"); // C#
System.out.println("\uD83D\uDE01"); // Java

Try viewing the HTML source of this page. Notice how the browser renders a readable emoji, while the source may contain Unicode values, escape sequences, or HTML entities.



Unicode Composition

Some emojis are not made from a single value. They are composed from multiple Unicode code points that are combined into one visible symbol.

Common examples include skin tones, gender variations, and family emojis. This means that what looks like one character on screen may actually consist of several underlying values.


Skin Tone Modifiers

The following examples use a base emoji combined with skin tone modifiers:

Rendered emoji Description HTML source
👱 No skin tone 👱
👱🏿 Dark skin tone 👱🏿
👱🏾 Medium dark skin tone 👱🏾
👱🏽 Medium skin tone 👱🏽
👱🏼 Medium light skin tone 👱🏼
👱🏻 Light skin tone 👱🏻


Zero-Width Joiner Sequences

Some emojis use a zero-width joiner to combine several emojis into one visible emoji. The zero-width joiner is invisible, but it changes how the characters are rendered.

Rendered emoji Description HTML source
👩🏿‍👩🏿‍👧🏿‍👦🏿 Family emoji using dark skin tone modifiers 👩🏿‍👨🏿‍👧🏿‍👦🏿
👩🏼‍👨🏼‍👧🏼‍👦🏼 Family emoji using medium light skin tone modifiers 👩🏼‍👨🏼‍👧🏼‍👦🏼

Example Breakdown

The following shows how a complex emoji is constructed from multiple Unicode values. Each part is listed in the exact order used in the HTML source:

HTML Decimal Code point Description
👩 128105 U+1F469 Woman
🏿 127999 U+1F3FF Dark skin tone modifier
8205 U+200D Zero-width joiner (invisible)
👨 128104 U+1F468 Man
🏿 127999 U+1F3FF Dark skin tone modifier
8205 U+200D Zero-width joiner (invisible)
👧 128103 U+1F467 Girl
🏿 127999 U+1F3FF Dark skin tone modifier
8205 U+200D Zero-width joiner (invisible)
👦 128102 U+1F466 Boy
🏿 127999 U+1F3FF Dark skin tone modifier

This is important for web security because validation, filtering, searching, and length checks may treat text differently than users see it. Always remember that the visible text is not necessarily the same as the underlying Unicode representation.