Variation selectors: emoji vs text presentation

Ever seen ❤ show up as a plain black heart instead of a red emoji? That's the variation selector at work — an invisible character that switches certain symbols between “text” and “emoji” presentation.

The two selectors

  • U+FE0F (VS16) — request emoji (colourful) presentation.
  • U+FE0E (VS15) — request text (monochrome glyph) presentation.

Why hearts and stars are weird

Characters like ❤ (U+2764) predate emoji and default to text on some platforms. Append U+FE0F and you get the emoji: U+2764 U+FE0F → ❤️. Without it, you may see a thin black heart. This is why copied hearts sometimes look “wrong.”

Developer gotcha

That invisible U+FE0F counts toward string length and can be lost when text is sanitized, causing an emoji to render as a plain glyph. If your emoji looks monochrome, a missing variation selector is a prime suspect.

Frequently asked questions

What is U+FE0F?

The emoji variation selector (VS16). Adding it after certain characters forces the colourful emoji presentation.

Why is my heart emoji black and white?

It's missing the U+FE0F variation selector, so it falls back to plain text presentation.