What Are ZWJ Sequences? How Emoji Combine

The Invisible Character Behind Complex EmojiEmoji
Từ tiếng Nhật (絵文字) có nghĩa là 'ký tự hình ảnh' — các ký hiệu đồ họa nhỏ dùng trong giao tiếp kỹ thuật số để diễn đạt ý tưởng, cảm xúc và sự vật.

Have you ever wondered how 👩‍💻 (woman technologist) is a single emoji, yet it's made of three parts? The answer is the Zero Width JoinerZero Width Joiner (ZWJ)
Ký tự Unicode vô hình (U+200D) dùng để ghép nhiều emoji thành một emoji tổng hợp, chẳng hạn kết hợp người và vật thể thành emoji nghề nghiệp.
(ZWJ) — an invisible UnicodeUnicode
Tiêu chuẩn mã hóa ký tự phổ quát gán một số duy nhất cho mỗi ký tự trong tất cả hệ thống chữ viết và bộ ký hiệu, bao gồm cả emoji.
character (U+200D) that glues emoji together.

A ZWJ sequence works like this:

👩 (U+1F469) + ZWJ (U+200D) + 💻 (U+1F4BB) = 👩‍💻

The "zero width" means the character takes up no visual space — you can't see it, but the rendering engine knows to combine the surrounding emoji into one glyph.

How ZWJ Sequences Are Built

ZWJ sequences follow a simple pattern: base emoji + ZWJ + modifier emoji, repeatable. The family emoji demonstrates this with multiple joins:

👨 + ZWJ + 👩 + ZWJ + 👧 + ZWJ + 👦 = 👨‍👩‍👧‍👦

That's 7 code points (4 emoji + 3 ZWJ characters) rendered as a single family glyph.

Common ZWJ Categories

Category Example Sequence
Professions 👩‍🚀 person + ZWJ + rocket
Families 👨‍👩‍👧 man + ZWJ + woman + ZWJ + girl
Couples 👩‍❤️‍👨 woman + ZWJ + heart + ZWJ + man
Activities 🏃‍♀️ runner + ZWJ + female sign
Hair styles 👩‍🦰 woman + ZWJ + red hair

The Graceful Fallback

What happens when a platform doesn't support a particular ZWJ sequence? The emoji simply appear side by side. If your device doesn't recognize 👩‍💻, it shows 👩💻 — two separate emoji. This is by design. It means new ZWJ sequences can be proposed without breaking older devices.

Why ZWJ Instead of New Code Points?

Assigning a unique code point to every possible combination of people, professions, skin tones, and genders would require millions of entries. ZWJ sequences are compositional — they build complex emoji from existing simple ones. This is more efficient and allows platforms to add new combinations without waiting for Unicode approval of new code points.

Counting Characters with ZWJ

ZWJ sequences are a common source of bugs in software. JavaScript's .length property counts UTF-16UTF-16
Kiểu mã hóa Unicode có chiều rộng thay đổi, dùng 2 hoặc 4 byte cho mỗi ký tự, được JavaScript, Java và Windows dùng nội bộ.
code units, not visual characters:

'👩‍💻'.length  // Returns 5, not 1!
// 0xD83D 0xDC69 (👩) + 0x200D (ZWJ) + 0xD83D 0xDCBB (💻)

To correctly count grapheme clusters, use Intl.Segmenter:

[...new Intl.Segmenter().segment('👩‍💻')].length  // Returns 1

Try It Yourself

Use our Sequence Analyzer to paste any emoji and see its complete code point breakdown — ZWJ characters, variation selectors, and all.

Công cụ liên quan

🔍 Trình phân tích chuỗi Trình phân tích chuỗi
Giải mã chuỗi ZWJ, modifier tông màu da, chuỗi phím và cặp cờ thành các thành phần riêng lẻ.

Thuật ngữ

Điểm mã Điểm mã
Giá trị số duy nhất được gán cho mỗi ký tự trong tiêu chuẩn Unicode, được viết theo định dạng U+XXXX (ví dụ: U+1F600 cho 😀).
Emoji Emoji
Từ tiếng Nhật (絵文字) có nghĩa là 'ký tự hình ảnh' — các ký hiệu đồ họa nhỏ dùng trong giao tiếp kỹ thuật số để diễn đạt ý tưởng, …
Unicode Unicode
Tiêu chuẩn mã hóa ký tự phổ quát gán một số duy nhất cho mỗi ký tự trong tất cả hệ thống chữ viết và bộ ký hiệu, bao gồm …
UTF-16 UTF-16
Kiểu mã hóa Unicode có chiều rộng thay đổi, dùng 2 hoặc 4 byte cho mỗi ký tự, được JavaScript, Java và Windows dùng nội bộ.
Zero Width Joiner (ZWJ) Zero Width Joiner (ZWJ)
Ký tự Unicode vô hình (U+200D) dùng để ghép nhiều emoji thành một emoji tổng hợp, chẳng hạn kết hợp người và vật thể thành emoji nghề nghiệp.

Bài viết liên quan