Finds what the eye cannot see: zero-width characters, tag codes from the U+E0000 range that can hide an entire message inside a sentence, look-alike letters and non-breaking spaces. Every find is shown with its code point and position.
Your text never leaves your device. The check runs inside your browser: nothing is sent anywhere.
| Category | Code points | Why it matters |
|---|---|---|
| Zero width | U+200B, U+200C, U+200D, U+2060, U+FEFF | Invisible entirely; the usual way to mark text |
| Tag characters | U+E0000–U+E007F, U+E01F0–U+E0FFF | A whole message hides inside an ordinary string |
| Ignorable | U+2065, U+FFF0–U+FFF8, U+E0080–U+E00FF | Reserved invisible code points |
| Non-characters | U+FDD0–U+FDEF, U+xFFFE, U+xFFFF | The standard forbids them in interchange |
| Text direction | U+202A–U+202E, U+2066–U+2069 | Reverse the output: file.exe can look like a picture |
| Blank carriers | U+180E, U+3164, U+FFA0, U+115F | Render as emptiness but are not spaces |
| Variation selectors | U+FE00–U+FE0F, U+E0100–U+E01EF | Outside emoji they are used for steganography |
| Look-alike letters | Cyrillic, Greek | Look-alike domains and filter evasion |
No. Two different things get called the same name. Invisible Unicode characters — what this tool finds — are inserted by editors, chatbots and sometimes deliberately; they are removed completely and verifiably. Statistical watermarks such as SynthID-Text live not in the characters but in the choice of words: during generation the model nudges token probabilities using a secret key. There is nothing in the file a filter could cut out. Such a mark can only be broken by rewriting the text with another model, and even then the result is probabilistic. Any service promising to “remove the AI watermark” with one button either does exactly what this page does, or simply paraphrases your text.
U+200D (zero-width joiner) is both an invisible character and the glue that holds compound emoji together: 👨👩👧 is three people joined by two of them, and 🏳️🌈 is a flag plus a rainbow. The same character is required in Arabic and Indic scripts. So such characters are never removed blindly: the neighbours are inspected, and if they are emoji or letters of the relevant script the character stays. The report shows how many service characters were kept and why.
The Cyrillic “а” and the Latin “a” look identical but are different characters. Look-alike domains, filter evasion and broken search all build on that. The tool only fixes obvious substitutions: no more than two foreign letters in a word and each of them having a counterpart. Words where scripts mix on purpose — brand names, transliteration in file names — are left alone.