codepoints covered in this guide
4
scripts where one of them is required
2
proof a flag gives about authorship
0

The basics

What zero-width characters actually are

A zero-width character is a real codepoint that renders with no width at all. Not a space you can see, not a layout gap, it takes up no room on screen yet sits in the text exactly like any other character would.

That is the specific trouble with them. A search, a diff tool or a slug generator reads every codepoint in a string, visible or not, so a zero-width character changes what a machine sees while leaving what a person sees untouched.

The characters

The four characters covered in this guide

Worth telling apart rather than treating as one interchangeable problem.

Zero-width space (U+200B)
The plain case. Occupies a slot and does nothing else. The most common of the four in copied chat output.
Zero-width non-joiner (U+200C)
Stops two adjacent letters from visually joining. Has a genuine linguistic job, covered below.
Zero-width joiner (U+200D)
The opposite instruction: join what follows to what came before. Its clearest use is compound emoji.
Word joiner (U+2060)
A close relative under a different name. Marks two characters as belonging together while rendering nothing.

Why scanners react

Why scanners flag them as AI watermarks

Chat interfaces use zero-width characters as internal bookkeeping: marking formatting boundaries, tracking cursor position through a copy, sometimes just an artefact of assembly before the text reached your clipboard. None of that requires a language model to explain, but AI chat interfaces are a common, repeatable source, which is why a scanner built for AI text checks these codepoints specifically.

A scanner flags a codepoint, not an author. It reports a specific invisible character at a specific position, a fact about the text. What produced the text is a separate question the character alone can't answer.

The honest part

The legitimate uses these characters actually have

Not everything flagged here is residue.

Emoji sequences
The zero-width joiner fuses separate emoji into one compound glyph: a person plus a laptop, a family of four, a two-letter flag. Strip it blindly and multi-part emoji fall apart.
Persian text
The zero-width non-joiner separates a prefix or suffix from its stem so the two display correctly while still reading as one word.
Indic scripts
In Devanagari, Bengali and several others, the same character stops two consonants from merging into a single conjunct glyph when the writer wants them shown separately.

The fix

How to remove zero-width residue safely in three steps

The goal is removing residue without removing characters doing real work.

1. Scan before touching anything
See exactly what's present, by name and position, before changing a single character.
2. Check what the flags actually are
A joiner between two emoji, or a non-joiner inside Persian or Indic text, is a different finding from one sitting between two English words.
3. Clean the rest
Remove the zero-width space, the word joiner, and any joiner or non-joiner not doing linguistic or emoji work. Leave the ones that are.

Straight answer

Does a zero-width character prove text is AI-written?

No. These characters turn up in text from PDFs, word processors, translation software, and ordinary web pages with no language model anywhere near them. Finding one tells you something about formatting or copying, not about who or what wrote the words.

Treat a zero-width finding as a formatting fact worth cleaning up, not evidence about a document's origin.

Elsewhere

Where else these characters show up

Deliberate uses outside AI text exist too: splitting a word inside a hashtag without visibly breaking it, slipping past a simple keyword filter, or making two identical-looking usernames register as different strings to a system comparing them byte for byte. None of that is about AI writing at all, and knowing this territory exists helps keep a single flagged character from being read as more significant than it is.

Aftercare

What to check after removing them

If the text has emoji, confirm compound ones still render as a single glyph rather than separate pictures side by side. If it's in Persian or an Indic script, read it back and confirm the letterforms still look right. A cleaning pass that trades an invisible problem for a visible one hasn't actually helped, whatever it did to the byte count.

FAQ

Everything answered. Nothing to click open.

What is a zero-width joiner?

A character, U+200D, instructing two adjacent characters to render as one joined glyph, most visibly used in compound emoji.

What is a zero-width non-joiner?

A character, U+200C, preventing two adjacent letters from joining into a connected glyph, with a real role in Persian and some Indic scripts.

How many characters does this guide cover?

Four: zero-width space, zero-width non-joiner, zero-width joiner, and the word joiner, which behaves the same way under a different name.

Will removing them break my emoji?

It can, if done blindly. A joiner gluing an emoji sequence together should be recognised and left alone.

Is the zero-width non-joiner used in English?

Not functionally. In English text it's almost always residue.

Does Persian text really need it?

Yes, to separate a prefix or suffix from its stem so both display correctly without visually joining.

Do Indic scripts need it too?

Several do, to stop two consonants from merging into a single conjunct glyph.

Does finding one prove AI authorship?

No. The same characters appear in PDFs, translation tools and word processors with no model involved.

Do all AI models leave the same residue?

The formatting and copy mechanism is similar across chat tools, so text from any of them can carry the same characters.

How do I check my text safely?

Scan it with a tool that names each character and position first, rather than running a blind delete-all pass.

Will cleaning change my Persian or Indic-script text?

It shouldn't, if the cleaner recognises which non-joiners are doing linguistic work. Review flags in that kind of text before a bulk removal.

Are these the same as a byte-order mark or soft hyphen?

No, separate categories with their own causes. This guide is specifically the zero-width and word-joiner family.

Can these characters hide text in a URL or hashtag?

Yes, they've been used to split a word without visibly breaking it, or to slip past a simple filter.

Will removing them change my word count?

Character count drops. Word count is unaffected, since none of these four are ordinary spaces.

Does this page include a working tool?

No, this is a guide. The watermark remover and checker on the homepage does the actual cleaning, with the same emoji and script-aware handling described here.

Is there a batch mode?

Not yet. Paste, scan, clean, repeat for the next document.

Does this apply to Claude, Gemini, Grok or Perplexity text?

Yes, these characters are a property of the text itself, not of one chat interface.

Does this guide work on mobile?

Yes, it reads the same way on a phone.

Do I need an account to use the scanner?

No. There is no account system anywhere in this app.

Is there a difference between this guide and the hidden characters guide?

Yes. That guide covers all 14 hidden characters this app checks for. This one narrows in on the four zero-width ones specifically, in more depth.