What are invisible characters?
Unicode reserves a small set of code points that carry no visible glyph at all. They take up a character slot in the text — your word processor or word count sees them, a diff tool flags them, a script that reads the file byte by byte trips over them — but nothing appears on screen. That's exactly what makes them frustrating: a search that should match, a line that wraps in the wrong place, or a script that fails to parse a value all point back to the same cause, and there's no visual clue to follow. An invisible character remover exists because you can't fix what you can't see; it scans the raw code points in your text rather than relying on how the text is rendered, then tells you exactly what was hiding in there.
Where hidden characters come from
Almost nobody types these characters on purpose. They arrive as a side effect of how text moves between applications. Copying from a web page can bring along a no-break space that the site used to keep a price and its currency symbol on one line, or a zero-width space that a CMS inserted into a long URL so it would wrap instead of overflowing its column. Word processors routinely save a byte order mark at the very start of a file. Text typed on a phone keyboard, translated by machine translation, or copied out of a PDF can pick up directional marks, soft hyphens, or joiners meant to control how mixed-language or justified text renders in its original context. None of this is malicious — it's just formatting metadata that made sense where the text came from and stopped making sense the moment you pasted it somewhere else. Once you know to look, hidden characters in text turn out to be a routine, everyday byproduct of copy-paste rather than anything unusual.
Characters this tool detects
This tool checks every character in your input against the following list. Some of them are true zero-width characters with no width at all; others, like the no-break space, are visible-width but still behave in ways a normal space doesn't.
| Character | Code point | What it typically does |
|---|---|---|
| No-Break Space | U+00A0 | Looks like a regular space but blocks a line break at that position |
| Soft Hyphen | U+00AD | Invisible unless the word actually breaks there, then shows as a hyphen |
| Zero Width Space | U+200B | No width at all; used to hint where long words or URLs may wrap |
| Zero Width Non-Joiner | U+200C | Stops adjacent characters from visually joining in scripts like Arabic or Persian |
| Zero Width Joiner | U+200D | Joins characters or emoji into a single combined glyph |
| Left-to-Right Mark | U+200E | Invisible hint that nearby text should flow left-to-right |
| Right-to-Left Mark | U+200F | Invisible hint that nearby text should flow right-to-left |
| Line Separator | U+2028 | A line break that many programs don't treat as an ordinary newline |
| Paragraph Separator | U+2029 | A paragraph break with the same parsing quirks as the line separator |
| Word Joiner | U+2060 | No width; prevents a line break without inserting any visible space |
| Zero Width No-Break Space (BOM) | U+FEFF | Byte order mark, often left at the very start of a saved text file |
| Variation Selector-1 through -16 | U+FE00–U+FE0F | Modifies how the preceding character or emoji is drawn |
Whatever the source, the fix is the same: run a zero width space remover pass that recognizes every entry on this list, not just the one or two characters you happen to know about, so you can actually remove unicode characters that are causing the problem instead of guessing at which one it is.
How to use the remover
Paste your text into the box on the left. As you type or paste, the report below the boxes updates immediately to say whether anything was found — and if so, exactly which code points, by name, and how many of each. The box on the right always shows the cleaned result: a no-break space becomes a regular space, line and paragraph separators become normal newlines, and every other character in the table above is stripped out entirely. Click Copy to grab the cleaned text, or Clear to start over. Everything runs locally in your browser — nothing you paste here is uploaded, logged, or stored anywhere.