Text & writing

Hidden character finder

Find zero-width, bidirectional, tag and other invisible or look-alike characters in text, and clean them out.

Hidden character finder
Esc to restore

Your inputs

Checks characters only. It does not detect AI-written text.

Paste text from a chat, a web page or a file. Up to 2 MB.

Results update as you type. Larger files run when you press Update result.

Your result

Your result will appear here.

More actions

Your inputs stay in this browser. Nothing is uploaded or saved.

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
  1. Case 1

    Inputs
    Do reportText a​b c‮dReport 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
  2. 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
  3. Case 3

    Inputs
    Do reportText Hello󠁩󠁧󠁮󠁯󠁲󠁥Report 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
  4. 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
  5. Case 5

    Inputs
    Do cleanText a​b c‮dZero-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

Example result
Line:columnCode pointCharacter or wordWhat it isContext
1:14U+200BZERO WIDTH SPACEInvisible characterаl account⟦·⟧ notice he
1:22U+00A0NO-BREAK SPACEUnusual spacent​ notice⟦·⟧here‮!
1:27U+202ERIGHT-TO-LEFT OVERRIDEBidirectional controlotice here⟦·⟧!
1:1U+0430PayаlMixed-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.