Hidden Character Detector
Inspect pasted text for a documented set of characters that may be hard to see, change text direction, or survive ordinary visual review—all locally in your browser.
A QUICK WALKTHROUGH
How to use this tool
- Paste up to 100,000 characters and choose the character categories to inspect.
- Choose a detailed report, visible markers, or an explicit cleanup output.
- Review every 1-based code-point position before copying or downloading the result.
A fixed, explainable detection scope
The detector covers bidirectional marks, embeddings, overrides, and isolates; a fixed list of zero-width or invisible format characters; Unicode space characters outside ordinary ASCII space; and C0, DEL, or C1 controls except line breaks. It does not infer every default-ignorable code point, detect look-alike letters, or prove that text is safe.
Cleanup is deliberately opt-in
The default output is a report. Marker mode inserts readable U+ labels. Normalize mode changes detected unusual spaces to ASCII spaces and removes other detected characters; remove mode deletes every detected character. ZWJ, ZWNJ, bidirectional marks, and non-breaking spaces can be required by languages, emoji, or formatting, so review the report before cleaning.
GOOD TO KNOW
Common questions
Are all detected characters malicious?
No. Many have legitimate uses in writing systems, emoji sequences, layout, and copied documents. Detection means the character is difficult to inspect visually, not that it is an attack.
How are positions counted?
The report uses 1-based Unicode code-point positions for the whole text and for each line. A supplementary-plane emoji counts as one code point even though JavaScript stores it in two UTF-16 code units.
Does this detect Unicode homoglyphs or confusable letters?
No. It detects the documented invisible, spacing, direction, and control categories only. It does not compare visually similar letters from different scripts.