Gemini zero-width space remover
What the Gemini zero-width space remover does
A zero-width space takes up a position in a string of text and shows nothing on screen. This app scans text copied out of Gemini, chat window or Docs export, for U+200B and the small set of related invisible characters that usually ride along with it, and removes every one, leaving every visible word untouched.
It's local. The scan and the removal both happen in your browser, so nothing you paste is uploaded, and there's no limit on length or on how often you come back.
That matters specifically for text you can't visually verify. If a hidden character passed through a server before coming back cleaned, you'd have no way to confirm from the result that nothing else happened to it along the way.
Workflow
How to remove zero-width spaces from Gemini text in three steps
There's nothing to preview beforehand, since the whole problem is invisible until you run it.
- Step 1
- Copy the reply from Gemini or from an exported Doc, and paste it in.
- Step 2
- Press Remove. It runs instantly, on your own device.
- Step 3
- Copy the result. Every visible word is exactly as it was.
Why Gemini specifically
Why nested lists and Docs exports leave characters behind
Gemini answers lean heavily on a bolded lead-in followed by indented sub-points, and keeping that indentation visible rather than letting it collapse is exactly the kind of job a non-breaking space handles. A straight copy from the chat window can carry those characters at every indentation level, invisible and indistinguishable from an ordinary space.
Export to Docs adds a second rendering pass on top of the first: the answer becomes an actual Google Docs document with its own way of representing spacing and structure. Text copied back out of that Doc has been through two separate rendering steps, either of which can introduce its own invisible characters.
Scope
This app clears more than just the space named in the title
The zero-width space is the character most people mean by the name, but it's one of a family. This app also removes the zero-width joiner and non-joiner, the word joiner, a stray byte-order mark, the soft hyphen, and the non-breaking, narrow and hair spaces that look like an ordinary gap but aren't.
A joiner found inside a genuine emoji sequence is left alone, since stripping it would visually break the emoji apart, and space-like characters get swapped for a plain space rather than deleted, so word boundaries and line wrapping stay correct afterward.
Why it matters
What these hidden characters actually break
Inside a heading or a slug, one of these characters splits the string for anything comparing it exactly: search, a regex match, a string equality check. Two values that render identically fail to match, because one carries a byte the other doesn't.
This shows up often in text pulled from a Docs export specifically, where a non-breaking space sitting in what looks like ordinary indentation can quietly break a search or a find-and-replace that should have worked.
Straight answer
Does finding one of these prove Gemini watermarked the text?
No. These are overwhelmingly incidental, produced by nested formatting and by the Docs export process, not planted on purpose to track the text later. Finding one tells you the text went through a rendering step somewhere; it says nothing about who wrote it.
Real research into AI text watermarking works differently: it biases which words a model is statistically more likely to pick across a whole passage, a pattern in the writing, not a single hidden character. No character-scanning tool, this one included, can see or touch that.
Who it's for
Who uses a Gemini zero-width space remover, and when
Publishing and SEO teams use it when a heading pulled from Gemini stops matching its slug, or an on-page search returns nothing for text that looks identical to what a reader sees. Anyone who exported a Gemini answer to Docs and reused it elsewhere runs it through here to clear characters from either rendering pass.
Developers pulling Gemini output into a config file or a commit use it too, since a hidden character in an identifier produces a failure with no visible cause.