ZERO WIDTH SPACE vs ZERO WIDTH NON-JOINER
Embed This Widget
Add the script tag and a data attribute to embed this widget.
Embed via iframe for maximum compatibility.
<iframe src="https://unicodefyi.com/iframe/entity//" width="420" height="400" frameborder="0" style="border:0;border-radius:10px;max-width:100%" loading="lazy"></iframe>
Paste this URL in WordPress, Medium, or any oEmbed-compatible platform.
https://unicodefyi.com/entity//
Add a dynamic SVG badge to your README or docs.
[](https://unicodefyi.com/entity//)
Use the native HTML custom element.
copied1 = false, 2000)"
:class="copied1 ? 'border-green-400 bg-green-50 dark:bg-green-950' : ''">
ZERO WIDTH SPACE
U+200B
View details →
copied2 = false, 2000)"
:class="copied2 ? 'border-green-400 bg-green-50 dark:bg-green-950' : ''">
ZERO WIDTH NON-JOINER
U+200C
View details →
VS
Property Comparison
| Property | U+200B | U+200C |
|---|---|---|
| Name | ZERO WIDTH SPACE | ZERO WIDTH NON-JOINER |
| Block | General Punctuation | General Punctuation |
| Script | Zyyy | Zinh |
| Category | Format (Cf) | Format (Cf) |
| Bidirectional | BN | BN |
Encoding Comparison
| Format | U+200B | U+200C |
|---|---|---|
| unicode | U+200B | U+200C |
| decimal | 8203 | 8204 |
| htmldecimal | ​ | ‌ |
| htmlhex | ​ | ‌ |
| css | \200B | \200C |
| javascript | \u{200B} | \u{200C} |
| python | \u200b | \u200c |
| java | \u200B | \u200C |
| go | \u200B | \u200C |
| ruby | \u{200B} | \u{200C} |
| rust | \u{200B} | \u{200C} |
| ccpp | \u200b | \u200c |
| urlencoded | %E2%80%8B | %E2%80%8C |
| utf8bytes | e2 80 8b | e2 80 8c |
| utf16bebytes | 20 0b | 20 0c |
| utf32bebytes | 00 00 20 0b | 00 00 20 0c |
How to Distinguish
Both characters are in the General Punctuation block but use different scripts: ZERO WIDTH SPACE uses Zyyy, while ZERO WIDTH NON-JOINER uses Zinh.
Tip: Paste the character into a hex editor or use
charCodeAt()
in JavaScript to check the actual codepoint.