What counts as an “invisible character”?
Unicode has a few hundred characters that take up no visible space or look exactly like a normal space. They exist for real reasons, such as controlling line breaks in Thai, joining emoji, or marking text direction in Arabic and Hebrew. Outside those jobs they are just noise. The ones we see most often in pasted text:
| Character | Code | What it does | Typical symptom |
| Zero-width space | U+200B | Allows a line break with no visible gap | Search can't find a word, a username "doesn't exist", a spreadsheet lookup fails |
| Zero-width joiner / non-joiner | U+200D / U+200C | Glues or separates characters in emoji and some scripts | Word counts are off, cursor "sticks" for one keypress |
| Word joiner | U+2060 | Forbids a line break | Odd wrapping in emails and CMS editors |
| Byte order mark | U+FEFF | File encoding marker that leaked into text | First column header in a CSV doesn't match, scripts fail on line 1 |
| Soft hyphen | U+00AD | Optional hyphenation point | Hyphens appear in the middle of words after pasting from PDFs |
| Left/right-to-left marks and overrides | U+200E, U+200F, U+202A–U+202E, U+2066–U+2069 | Control text direction | Punctuation jumps to the wrong end of a line; in code, text can display differently from how it runs |
| No-break and narrow no-break space | U+00A0, U+202F | A space that refuses to wrap | Times like "9:00 am" and numbers don't match searches or validation |
| Tag characters and variation selectors | U+E0000–U+E007F, U+FE00–U+FE0E | Metadata for flags and glyph variants | Text looks short but is far longer in bytes, can carry hidden content |
Why does AI-generated text have hidden characters?
There is no single cause, and it is worth being careful with claims you may have read online. In practice the most common sources are ordinary: chat interfaces render answers as formatted text, and copying from a browser brings across no-break spaces, narrow no-break spaces (often around times and units), and sometimes zero-width spaces used for line wrapping. PDFs add soft hyphens. Word processors add byte order marks and direction marks. Whatever the source, the fix is the same: find them and remove them before the text goes somewhere strict, like code, a spreadsheet, a form or a CMS.
A note on “watermarks”. Removing invisible characters only removes characters. It does not change wording, so it has no effect on statistical watermarks or on AI detectors that analyse writing style, and TidySnap does not claim otherwise. If you have to disclose AI assistance for school or work, cleaning formatting doesn't change that.
How to check text for hidden characters without a tool
- Count with your cursor. Put the cursor before a word and press the right arrow. If it takes two presses to move past one letter, a zero-width character is there.
- Compare lengths. In a spreadsheet,
=LEN(A1) returning more than the letters you can see means something invisible is in the cell.
- Use a code editor. VS Code highlights many invisible and ambiguous Unicode characters with a box by default.
These work for one or two lines. For anything longer, pasting into the tool above is faster and shows the exact Unicode name of each character.
Will removing them break anything?
For English and most European-language text, no. Two exceptions are handled for you: zero-width joiners between emoji are kept so 👨👩👧 stays one emoji, and line breaks are preserved. If you work with Arabic, Hebrew, Persian, Hindi or other scripts that rely on joiners or direction marks, untick “Invisible characters” and use only “Unusual spaces”.
Related