Hidden character finder
Find zero-width, bidirectional, tag and other invisible or look-alike characters in text, and clean them out.
A clear answer. Here’s how.
Scans every character against the Unicode categories that can hide or disguise text: zero-width and other invisible characters (zero-width space, word joiner, byte order mark, soft hyphen, Hangul and Braille blanks), zero-width joiners, bidirectional controls such as right-to-left override (the “Trojan Source” trick), tag characters (U+E0000 to U+E007F, which can carry hidden readable ASCII, decoded here), variation selectors, unusual spaces, line separators and control characters. Words that mix Latin with Cyrillic or Greek letters are flagged, with the look-alike letter named. Cleaning removes or replaces the invisible ones and leaves visible letters alone. It checks characters only: it cannot tell whether text was written by an AI, and no tool can do that reliably.
How this is checked
5 reference checks passed These 5 cases were run when this page was built, on 20 October 2026, and all reproduce within the stated tolerance. The same cases are part of the automated tests that run on every change to Toolmoz. Engine version 1.
See the checks and where each expected answer comes from
Case 1
- Inputs
- Do reportText ab cdReport suspiciousCurly quotes and dashes no
- Expected, and what Toolmoz gave
- Invisible characters expected 1, Toolmoz 1Unusual spaces expected 1, Toolmoz 1Bidirectional controls expected 1, Toolmoz 1Mixed-script words expected 0, Toolmoz 0
- Where the expected answer comes from
- One zero-width space (U+200B), one no-break space (U+00A0) and one right-to-left override (U+202E), counted by hand
- Allowed difference
- exact
Case 2
- Inputs
- Do reportText pаypal and payοffReport suspiciousCurly quotes and dashes no
- Expected, and what Toolmoz gave
- Mixed-script words expected 2, Toolmoz 2
- Where the expected answer comes from
- Cyrillic а (U+0430) inside “paypal” and Greek ο (U+03BF) inside “payoff” make two words that mix scripts
- Allowed difference
- exact
Case 3
- Inputs
- Do reportText HelloReport suspiciousCurly quotes and dashes no
- Expected, and what Toolmoz gave
- Tag characters expected 6, Toolmoz 6Hidden text decoded from tag characters expected ignore, Toolmoz ignore
- Where the expected answer comes from
- Six tag characters U+E0069 U+E0067 U+E006E U+E006F U+E0072 U+E0065 encode the ASCII letters i, g, n, o, r, e (each is the letter plus U+E0000)
- Allowed difference
- exact
Case 4
- Inputs
- Do reportText Family: 👨👩👧 and ❤️Report suspiciousCurly quotes and dashes no
- Expected, and what Toolmoz gave
- Joiners (zero-width) expected 0, Toolmoz 0Variation selectors expected 0, Toolmoz 0
- Where the expected answer comes from
- Joiners between emoji and the emoji variation selector are normal and are not reported in the default view
- Allowed difference
- exact
Case 5
- Inputs
- Do cleanText ab cdZero-width joiners when cleaning keepBidirectional controls when cleaning remove
- Expected, and what Toolmoz gave
- text expected ab cd, Toolmoz ab cdCharacters left expected 5, Toolmoz 5
- Where the expected answer comes from
- The zero-width space and the override are removed and the no-break space becomes an ordinary space
- Allowed difference
- exact
What this shows: the engine reproduces independently worked values for these cases. It does not prove every possible input is right. To test an answer you were given, see how to check a number; to see what is and is not checked across Toolmoz, see the accuracy ledger.
See a worked example
Worked example
A fixed demonstration, separate from the values you enter above.
- Do
- List what is hidden
- Text
- Payаl account notice here!
- Report
- Suspicious characters (skip normal emoji parts)
- Curly quotes and dashes
- Do not list them
Example result
| Line:column | Code point | Character or word | What it is | Context |
|---|---|---|---|---|
| 1:14 | U+200B | ZERO WIDTH SPACE | Invisible character | аl account⟦·⟧ notice he |
| 1:22 | U+00A0 | NO-BREAK SPACE | Unusual space | nt notice⟦·⟧here! |
| 1:27 | U+202E | RIGHT-TO-LEFT OVERRIDE | Bidirectional control | otice here⟦·⟧! |
| 1:1 | U+0430 | Payаl | Mixed-script word (Latin + Cyrillic) | а looks like a |
Lists characters that do not show on screen or that can disguise text: zero-width and invisible characters, bidirectional controls (used in “Trojan Source” attacks), Unicode tag characters (which can hide readable ASCII, shown above when found), unusual spaces, control characters and words that mix Latin with Cyrillic or Greek letters. A match is not proof of bad intent: zero-width joiners and variation selectors are normal inside emoji, and non-breaking spaces are common in typeset text. This checks characters only. It cannot tell whether text was written by an AI, which no tool can do reliably.