Skip to main content

Reference

Zero Width Non-Joiner (U+200C)

CleanPastedText editorial · Updated

Text workbench

Try it on your text

Cleaning mode

Removes hidden characters and standardizes AI-style punctuation.

Try a real example

Each sample contains a problem you cannot see.

Original

Pasted text

0 chars · 0 words

Cleaned

Ready to copy

0 changes

Text stays in this browser

Same words · No AI rewriting · No content logging

What is the zero-width non-joiner (U+200C)?

The zero-width non-joiner (ZWNJ, U+200C) is a Unicode format character with no visible glyph of its own. Unicode added it in version 1.1 (1993), in the General Punctuation block, precisely so that scripts where letters normally connect into cursive shapes could tell a renderer: stop joining here, but do not add a space — placed between two letters that would otherwise ligate, it forces each into its standalone or final presentation form. Its counterpart, the zero-width joiner (U+200D), does the opposite — it can force a join, or in emoji sequences, glue separate pictographs into one combined emoji. See the zero-width space guide for how U+200D behaves outside emoji.

That single job — un-joining without spacing — is what makes U+200C different from every other character on the invisible Unicode characters list. Most invisible characters are pure baggage anywhere they appear. U+200C is baggage in English prose, but load-bearing inside the words of several major writing systems.

Why Persian and Indic scripts need it

Arabic-script letters normally connect to their neighbors, changing shape depending on whether they sit at the start, middle, or end of a connected run. Persian compound words — including common verb forms built from two parts — are meant to be read and searched as one word, but their two halves must not cursively connect at the seam. Typing a normal space would split them into two separate words for search and spell-check; U+200C keeps them as one word while forcing correct, unconnected letterforms at the boundary.

Devanagari, Bengali, and other Indic scripts use it for a related but distinct purpose: inserting U+200C directly after a halant (virama) character blocks the automatic ligature that would otherwise fuse two consonants into a single conjunct glyph, and forces the visible halant form instead. Strip the character from that context and the rendered word changes — not just its spacing, its actual letter shapes.

The need was recognized early enough that HTML itself standardized a named entity for it — ‌ — alongside the zero-width joiner, so authors could write it directly into markup rather than relying on an invisible raw byte; see the 1997 HTML internationalization RFC that introduced it.

Script familyWhat U+200C controlsEffect of removing it
Persian / Arabic-scriptBlocks cursive joining between two word partsLetters visually merge at a boundary meant to stay separate
Devanagari, Bengali, other IndicForces a visible halant instead of a conjunct ligatureTwo consonants fuse into one glyph the writer didn't intend
Latin-script prose (English, etc.)Nothing — no cursive joining behavior to controlNo visible change; safe to remove as copy-paste debris

How U+200C ends up in ordinary text

Outside Persian, Arabic, and Indic-script content, U+200C almost always arrives as copy-paste residue rather than intentional formatting — carried over from a web page's HTML, a PDF export, a translation memory tool, or a CMS editor that inserted it and left it behind when the visible text was edited. It has no effect on English letterforms, so it sits invisibly inside a word or sentence until something like a search, string comparison, or code diff fails for no visible reason — the same class of problem covered in the general guide to removing invisible characters.

How to remove U+200C without breaking Persian or Indic text

CleanPastedText detects U+200C by name and reports it in the "What changed" table whether it gets removed or kept. Because removing it is only safe in some scripts, it has its own control in Advanced Controls, separate from the general invisible-characters toggle: switch off "Joiners (ZWNJ/ZWJ)" and U+200C and U+200D are left untouched outside emoji sequences, while every other cleaning rule — hidden characters, BiDi controls, typography — keeps running as normal. The full mechanics of what gets checked and in what order are covered in how the cleaning engine works.

If you're not sure whether your text depends on it, paste it in and check the report before changing any settings — a "kept" or "removed" label next to U+200C tells you exactly what happened, so nothing is stripped silently.

Common questions

Frequently asked questions

What is the zero-width non-joiner (U+200C)?

It is a Unicode format character (general category Cf, added in Unicode 1.1, 1993) that takes up no visible width. Placed between two letters that would otherwise connect into a cursive ligature, it forces each one into its standalone or word-final shape instead — without adding a visible space or breaking the word for search and spell-check purposes.

Why does Persian text need U+200C?

Persian compound words, like verb forms built from two parts, are written as one lexical unit but must not have their letters cursively joined at that boundary. U+200C sits between the two parts so each renders in its correct standalone letter form while search, copy, and line-wrapping still treat it as a single word — unlike typing a normal space, which would split it into two words.

Does U+200C do the same thing in Hindi or Bengali?

The goal is related but the effect differs: in Devanagari, Bengali, and other Indic scripts, placing U+200C after a halant (virama) blocks the automatic conjunct ligature between two consonants and forces the visible halant form instead. Without it, some conjunct consonant clusters render as a single fused glyph instead of the letters the writer actually intended.

Is it safe to remove U+200C from my text?

It depends on the script. In English or other Latin-script text, a stray U+200C is almost always copy-paste debris and safe to remove. Inside Persian, Arabic, or Indic-script words, removing it changes how the word displays and can merge letters that were meant to stay visually separate — so a cleaner should only strip it when you confirm the text doesn't depend on it.

How do I remove U+200C without breaking Persian or Indic text?

In CleanPastedText, open Advanced Controls and turn off 'Joiners (ZWNJ/ZWJ).' Every other cleaning rule — invisible characters, BiDi controls, typography — keeps running, but U+200C and its counterpart U+200D are left in place outside emoji sequences. The 'What changed' report labels them 'kept' so you can confirm nothing was silently stripped.

How is U+200C different from a zero-width space (U+200B)?

U+200B marks a possible line-break point inside text that has no visible spaces at all, such as Thai or Japanese. U+200C does the opposite job: it stops two letters from joining. Both are invisible and both travel silently through copy-paste, but stripping one has no relationship to whether the other is safe to strip in the same text.

Continue reading

Related guides & tools