Text can contain characters you can't see: spaces that aren't normal spaces, marks with no width at all, and even whole hidden sentences. They come from AI chat apps, word processors, web pages, and PDFs, and they cause strange bugs when the text is pasted into code, spreadsheets, forms, or another AI.
The usual suspects
| Character | Code | What it does |
|---|---|---|
| Zero-width space | U+200B | An invisible break point inside a word |
| Zero-width joiner and non-joiner | U+200D, U+200C | Join or separate letters and emoji; needed in some languages and emoji |
| Word joiner | U+2060 | Stops a line break, with no width |
| Byte order mark | U+FEFF | A file-encoding marker that sometimes ends up mid-text |
| Non-breaking space | U+00A0 | Looks like a space, but isn't one to code or search |
| Narrow no-break space | U+202F | A thinner non-breaking space, used in some number and date formats |
| Soft hyphen | U+00AD | Invisible unless a word is split at the end of a line |
| Tag characters | U+E0000–U+E007F | Invisible copies of letters that can spell out hidden text |
Why they cause problems
- Code and data break. A zero-width space in a variable name, a URL, or a CSV value makes it a different string, even though it looks identical. The error messages make no sense.
- Search and matching fail. "New York" with a non-breaking space doesn't match "New York" with a normal one.
- Hidden instructions. Tag characters can carry text that people can't see but AI models can read. This is known as ASCII smuggling, and it's one way of hiding instructions for an AI inside harmless-looking text.
- Formatting looks wrong. Lines refuse to wrap, or words split in odd places.
Are they an AI watermark?
Not reliably. Special spaces and invisible characters have turned up in text from AI chat apps, but they also come from word processors, web pages, and copy-and-paste. Their presence doesn't prove a text was written by AI, and removing them doesn't make AI-written text undetectable. Treat them as a formatting problem to clean up, not as evidence.
How to find and remove them
Paste the text into the LLM Output Sanitizer. It lists the hidden characters it finds, decodes any text hidden in tag characters, and gives you back clean text. It can also swap curly quotes, long dashes, and special spaces for plain keyboard characters.
Some invisible characters are needed. Emoji such as 👩💻 and flags are built with joiners, and Persian, Arabic, and Indic scripts use joiners too. The sanitizer keeps those by default, so cleaning text doesn't break it.
If the text is going to an AI model and came from somewhere you don't control, such as a web page, an email, or a document, check it with the Prompt Injection Scanner as well. It looks for hidden characters and for instructions written to manipulate the model.
Pasting AI answers into documents
When an AI answer is going into Google Docs, Word, or an email, the problem is usually the Markdown (**bold**, # headings) rather than hidden characters. Markdown to Rich Text turns it into formatted text you can paste, and removes hidden characters on the way.