Zero Width Space Remover — Remove Zero Width Characters from Any Text
Paste your text. The tool finds every U+200B, U+200C, U+200D, U+FEFF, U+2060 and U+00AD hiding inside it, then hands you a clean copy.
Hidden character report
Paste text to scan
What zero width characters actually are
Six code points do most of the damage. U+200B (zero width space) is the most common — it sits between characters and takes up no visual space whatsoever. U+200C (zero width non-joiner) and U+200D (zero width joiner) control how adjacent characters connect, which matters for ligatures in Arabic and for emoji sequences in English. U+FEFF was originally the byte order mark, a file-encoding hint that belongs at the start of a stream; encountered mid-paragraph, it is simply invisible garbage. U+2060 (word joiner) behaves like a zero width space but also tells the line-wrapping engine to treat the two surrounding characters as inseparable. U+00AD (soft hyphen) is visible only at a line break — everywhere else it hides.
Each has a legitimate use somewhere. None of them belongs in plain prose you copied out of a chat window or a CMS.
Where they come from
ChatGPT and similar tools stream answers through a renderer that assembles fragments on the fly. The renderer uses zero width joiners to hold emoji sequences together and word joiners to keep certain phrases from breaking across lines. When you press the copy button, the browser copies the character stream, not the picture you were looking at — joiners and all.
Word processors are the second major source. Microsoft Word inserts soft hyphens automatically when it hyphenates a word; paste that paragraph into a web form and the soft hyphens travel with it. Some CMS platforms inject U+FEFF at the start of a pasted block as a side effect of their rich-text editors. Web pages with bidirectional text routinely embed directional marks that survive a copy-paste into a plain editor.
The result is text that looks right on screen but behaves strangely in every system that reads it character by character.
Why zero width characters cause real problems
Search matching is the most common failure. A database query for the exact string "ChatGPT" returns nothing if there is a U+200B between the "t" and the "G". The characters look identical in every interface; the comparison is not.
Form validation breaks the same way. An email field that passes a regex check but contains a soft hyphen will fail the mail server's own validation. A username that looks unique is not unique if one copy has a zero width space the other lacks.
Code is even less forgiving. A Python string literal with a U+200B inside it compiles without complaint and then raises a KeyError at runtime because the dictionary key was stored without it. JavaScript template literals, SQL identifiers and YAML keys all behave the same way.
Word and Excel have their own quirks. Word counts soft hyphens as characters, so a document that looks like 500 words might report 512. Excel treats a cell starting with U+FEFF as text even when it contains a number, breaking every formula that references it. Sorting a column that mixes cells with and without zero width spaces produces an order that looks random.
For SEO the consequence is quieter but persistent. A title tag split by a U+200B is two tokens to a search index, not one. The keyword you optimised for may not match what the crawler read.
How to spot them before you clean
Three clues work without any tool. First, move the cursor through the text one keystroke at a time — if it jumps two positions for what looked like one gap, there is an invisible character between them. Second, click once just before a word, hold Shift and press the right arrow; if the selection seems to grab more than one character before the first visible letter appears, something is there. Third, try Find and Replace with the exact string you can see on screen — if it finds nothing, the stored string contains characters the display is hiding.
The cleaner on this page makes the count explicit. It reports each character type found, its Unicode code point, and how many times it appeared. That report is worth reading before you copy the cleaned text, because it tells you which step of your workflow is introducing the noise.
Three things people get wrong about zero width characters
They are not a virus or malware. A zero width space cannot execute code, escalate permissions or replicate itself. It is a data character, the same category as a comma or a letter. Cleaning it out removes a formatting artefact, not a threat.
They do not spread on their own. A document that contains one will not infect documents that share a folder with it. The character travels only when you copy text that contains it.
Removing them does not damage your formatting. Real spaces, paragraph breaks, tabs and punctuation are untouched. The cleaner on this page removes only the characters in its published table and collapses runs of whitespace it was already going to collapse. The words, sentences and layout come out exactly as you wrote them — minus the invisible layer.
The only case where cleaning changes something visible is a soft hyphen sitting exactly at a line break. Remove the soft hyphen and the word may no longer break there. That is a correct outcome: the line-break point was inserted by a word processor, not by you, and your layout engine is better placed to decide where to break.
How this tool removes zero width characters
Paste your text and press Clean. The engine reads the input one Unicode code point at a time — not one byte, not one code unit, but one actual character. Every code point is checked against a published table. U+200B, U+200C, U+200D, U+FEFF, U+2060 and U+00AD are removed. U+00A0 (non-breaking space), U+2007 (figure space) and U+202F (narrow non-breaking space) are normalised to an ordinary space rather than deleted, because deleting them would silently join two words.
The report underneath the output box lists every change, grouped by character type. If nothing is found, the report says so — it does not invent rows to look busy. You can check the report against the input before you copy the cleaned text, and you can use the detector page on this site if you want the report alone, without producing a cleaned copy.
Internal links: for removing AI-generated text artefacts broadly, see the <a href="/chatgpt-watermark-remover">ChatGPT watermark remover</a> or <a href="/clean-ai-text">clean AI text</a> pages. For a general-purpose pass over any kind of pasted text, the <a href="/ai-text-cleaner-online">AI text cleaner online</a> covers the same character set.
Characters this tool looks for
25 invisible characters and formatting controls, with the action taken on each one.
| Character | Code point | Action | What it does |
|---|---|---|---|
| Zero-width characters | |||
| Zero Width Space | U+200B | Removed | Invisible separator with no width. Commonly left behind when text is copied out of a chat window. |
| Zero Width Non-Joiner | U+200C | Removed | Invisible character that blocks two letters from joining in scripts such as Arabic or Devanagari. |
| Zero Width Joiner | U+200D | Removed | Invisible character used to glue emoji sequences together. Stray copies can break word wrapping. |
| Zero Width No-Break Space (BOM) | U+FEFF | Removed | Byte order mark. Harmless at the start of a file, invisible noise anywhere else. |
| Word Joiner | U+2060 | Removed | Tells a text engine not to break a line here. Invisible, and easy to carry along by accident. |
| Mongolian Vowel Separator | U+180E | Removed | A legacy invisible separator from Mongolian script that now renders as nothing at all. |
| Bidirectional controls | |||
| Left-to-Right Mark | U+200E | Removed | Directional hint for mixed-script lines. Invisible on screen but present in the character stream. |
| Right-to-Left Mark | U+200F | Removed | Mirror of the left-to-right mark, used to steer the order of mixed-direction text. |
| Arabic Letter Mark | U+061C | Removed | Invisible directional marker for Arabic text. Rarely intentional outside its original document. |
| Left-to-Right Embedding | U+202A | Removed | Opens an embedded left-to-right run. Unpaired copies can scramble the order of a sentence. |
| Right-to-Left Embedding | U+202B | Removed | Opens an embedded right-to-left run. Left behind after copy-paste, it can flip nearby punctuation. |
| Pop Directional Formatting | U+202C | Removed | Closes an embedded directional run. Without its partner it is pure invisible noise. |
| Left-to-Right Override | U+202D | Removed | Forces following characters to display left-to-right regardless of their own direction. |
| Right-to-Left Override | U+202E | Removed | Forces following characters to display right-to-left. A common cause of text that looks reversed. |
| Left-to-Right Isolate | U+2066 | Removed | Modern replacement for the embedding controls. Still invisible, still travels with copied text. |
| Right-to-Left Isolate | U+2067 | Removed | Isolates a right-to-left run from the surrounding paragraph direction. |
| First Strong Isolate | U+2068 | Removed | Isolates a run whose direction is decided by its first strong character. |
| Pop Directional Isolate | U+2069 | Removed | Closes an isolate opened by one of the isolate controls above. |
| Formatting controls | |||
| Soft Hyphen | U+00AD | Removed | A hyphen the reader only sees if the word happens to break at the end of a line. |
| Carriage Return (CR) | U+000D | Removed | Half of a Windows line ending. Kept on its own it produces doubled spacing in most editors. |
| Markdown Asterisk Marker | U+002A | Removed | Bold or italic marker such as ** left behind when text is copied in its raw form. Turn this group off to keep Markdown styling marks. |
| Markdown Backtick Marker | U+0060 | Removed | Inline-code backtick left behind after copying raw assistant output. Turn this group off to keep inline code marks. |
| Invisible spaces | |||
| No-Break Space | U+00A0 | → space | Looks exactly like a space but stops a line from breaking there. A frequent copy-paste leftover. |
| Figure Space | U+2007 | → space | A space as wide as a digit, used to align numbers in tables. Replaced with a normal space. |
| Narrow No-Break Space | U+202F | → space | A thin, non-breaking space from French typography. Replaced with a normal space. |
Frequently Asked Questions
▸Does removing zero width spaces change how my text looks?
Almost never. Zero width spaces are invisible by definition, so removing them leaves the visual appearance identical. The one exception is a soft hyphen (U+00AD) that sits at an active line-break point — remove it and the word may wrap differently. That is the correct result: the hyphen was inserted by a word processor, not chosen by you.
▸Why does my text fail a search even though it looks right?
A zero width character between two letters makes the string different from the same string without it. Paste the problem text into this tool and check the report — if U+200B or U+200C appears, that is the cause. Clean the text, paste it back into your search query, and the match will work.
▸Can zero width characters get into my text without me pasting them?
Yes, in a few ways. Some rich-text editors insert U+FEFF automatically when they receive pasted content. Autocorrect in mobile keyboards occasionally inserts a zero width non-joiner between characters it decides should not form a ligature. Markdown-to-HTML converters sometimes emit word joiners around code spans. The cleaner handles all of these the same way.