# Emoji

Key: `representation.text.emoji`

Single emoji character or emoji sequence.

Page: <https://meridian.online/docs/projects/finetype/types/representation/text/emoji>

Samples: `😀`, `🎉`, `❤️`, `🚀`

## Background

### Origin

The word emoji comes from Japanese e ('picture') + moji ('character').[[1]](https://en.wikipedia.org/wiki/Emoji) The resemblance of the word emoji to the English words emotion and emoticon is purely coincidental.[[1]](https://en.wikipedia.org/wiki/Emoji) Emoji became available in 1999 on Japanese mobile phones.[[2]](https://www.unicode.org/reports/tr51/) In October 2016, the Museum of Modern Art acquired the original collection of emoji distributed by NTT DoCoMo in 1999.[[1]](https://en.wikipedia.org/wiki/Emoji)

An early proposal in 2000 to encode DoCoMo emoji in the Unicode Standard led to no action being taken.[[2]](https://www.unicode.org/reports/tr51/) Each Japanese mobile phone carrier developed a different, but partially overlapping, set of emoji.[[2]](https://www.unicode.org/reports/tr51/) Each Japanese mobile phone vendor used its own text encoding extensions, which were incompatible with one another.[[2]](https://www.unicode.org/reports/tr51/) On Japanese phones, characters from other platforms that could not be displayed were represented with 〓 (U+3013 GETA MARK).[[2]](https://www.unicode.org/reports/tr51/) A set of 722 characters was defined as the union of emoji characters used by Japanese mobile phone carriers.[[2]](https://www.unicode.org/reports/tr51/)

Unicode Technical Standard \#51, Unicode Emoji, defines the structure of Unicode emoji characters and sequences.[[2]](https://www.unicode.org/reports/tr51/) Version 18.0 of UTS \#51 is dated 2026-08-28.[[2]](https://www.unicode.org/reports/tr51/) UTS \#51 defines an emoji as a colorful pictograph that can be used inline in text.[[2]](https://www.unicode.org/reports/tr51/) Starting with Version 11.0 of UTS \#51, the repertoire of emoji characters is synchronised with the Unicode Standard and has the same version numbering.[[2]](https://www.unicode.org/reports/tr51/)

### Use

Under UTS \#51, an emoji is represented internally as an image, an encoded character, or a sequence of encoded characters.[[2]](https://www.unicode.org/reports/tr51/) UTS \#51 defines U+FE0F VARIATION SELECTOR-16 as the character used to request an emoji presentation for an emoji character.[[2]](https://www.unicode.org/reports/tr51/) UTS \#51 defines U+FE0E VARIATION SELECTOR-15 as the character used to request a text presentation for an emoji character.[[2]](https://www.unicode.org/reports/tr51/) UTS \#51 defines an emoji flag sequence as a sequence of two Regional Indicator characters.[[2]](https://www.unicode.org/reports/tr51/) UTS \#51 states that a singleton Regional Indicator character is not a well-formed emoji flag sequence.[[2]](https://www.unicode.org/reports/tr51/) UTS \#51 defines an emoji ZWJ sequence as an emoji sequence with at least one joiner character, U+200D.[[2]](https://www.unicode.org/reports/tr51/) Five symbol modifier characters providing a range of skin tones for human emoji were released in Unicode Version 8.0.[[2]](https://www.unicode.org/reports/tr51/) The skin-tone modifiers are based on the six tones of the Fitzpatrick scale, a recognised standard for dermatology.[[2]](https://www.unicode.org/reports/tr51/) UTS \#51 notes that all emoji sequences are single grapheme clusters, with never a grapheme cluster boundary inside one.[[2]](https://www.unicode.org/reports/tr51/)

In JavaScript, a string's length property counts UTF-16 code units.[[3]](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/length) In DuckDB, length(string) returns the number of characters in a string.[[4]](https://duckdb.org/docs/current/sql/functions/text) In DuckDB, length\_grapheme(string) returns the number of grapheme clusters in a string.[[4]](https://duckdb.org/docs/current/sql/functions/text) DuckDB's documentation gives length\_grapheme('🤦🏼‍♂️🤦🏽‍♀️') as 2.[[4]](https://duckdb.org/docs/current/sql/functions/text) Decide which count you mean, bytes, code points or grapheme clusters, before you set a column width or a length check on emoji data. (Meridian's view)

MySQL's utf8mb3 character set supports BMP characters only, with no support for supplementary characters.[[5]](https://dev.mysql.com/doc/refman/8.4/en/charset-unicode-utf8mb3.html) MySQL's utf8mb3 character set is deprecated.[[5]](https://dev.mysql.com/doc/refman/8.4/en/charset-unicode-utf8mb3.html) If emoji go missing or arrive mangled after a load into a database, the column's character set is the first place to look. (Meridian's view)

UTS \#51 gives a simplified expression that can be used to quickly scan for possible emoji.[[2]](https://www.unicode.org/reports/tr51/) UTS \#51 states that the only valid emoji flag sequences are those listed in the emoji-sequences.txt data file.[[2]](https://www.unicode.org/reports/tr51/) Unicode's emoji-test.txt file gives each emoji a status of component, fully-qualified, minimally-qualified or unqualified.[[6]](https://www.unicode.org/Public/emoji/latest/emoji-test.txt) To validate strictly, check values against the emoji-test.txt of the Unicode version your source system supports, rather than against character categories alone. (Meridian's view) When grouping or joining on an emoji column, decide deliberately whether a value with U+FE0F and the same value without it count as one emoji. (Meridian's view)

## Sources

1. [Emoji - Wikipedia](https://en.wikipedia.org/wiki/Emoji) — secondary source
2. [UTS \#51: Unicode Emoji](https://www.unicode.org/reports/tr51/) — standard
3. [String: length - JavaScript \| MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/length) — documentation
4. [Text Functions – DuckDB](https://duckdb.org/docs/current/sql/functions/text) — documentation
5. [12.9.2 The utf8mb3 Character Set (3-Byte UTF-8 Unicode Encoding)](https://dev.mysql.com/doc/refman/8.4/en/charset-unicode-utf8mb3.html) — documentation
6. [emoji-test.txt](https://www.unicode.org/Public/emoji/latest/emoji-test.txt) — standard
