Free local text debugging tool

Invisible Unicode & Text Inspector

Find the characters you cannot see. Reveal hidden spaces and direction controls, inspect every code point, and preview exactly what cleaning will change.

Up to 20,000 UTF-16 units. Text is processed locally, not uploaded or saved. No clipboard access until you click Copy.

Paste text or try an example.

How to find invisible characters in text

  1. Paste the text that is causing a copy/paste, search, or formatting problem.
  2. Read the visible tokens, then filter the character table to hidden controls, whitespace, or bidi controls. Search for a Unicode name or a code point such as U+200B.
  3. Review the category, script, and warning for each character. A warning is not proof of an error or attack.
  4. Enable only the cleaning rules you need. Compare the escaped source and preview, then copy the output. Applying the preview to the source is a separate, undoable action.

Zero-width space vs. non-breaking space

A zero-width space (U+200B) can indicate a break opportunity without a visible space. A non-breaking space (U+00A0) is a space that normally prevents a line break. Both can make apparently identical copied strings differ. Replacing NBSP with an ordinary space changes wrapping semantics; removing a zero-width space joins the surrounding characters.

ZWJ (U+200D) and ZWNJ (U+200C) are not simply junk: they can affect text shaping, and ZWJ is used in many emoji sequences. They have a separate, opt-in removal rule.

Bidirectional controls and lookalikes

Direction controls influence how mixed left-to-right and right-to-left text is displayed. This tool exposes them in logical order rather than allowing them to rearrange the diagnostic view. Arabic or Hebrew letters are not errors, and legitimate multilingual text may use direction controls.

Possible lookalikes are a limited subset of Unicode's confusables mappings: individual non-ASCII characters whose skeleton consists of ASCII letters or digits. This is not a complete spoofing detector or a visual guarantee. Lookalikes are never automatically replaced; different fonts and context matter.

Why character counts disagree

A visible character can contain several code points. An accent can be a separate combining mark; a family emoji can contain several emoji joined together. Grapheme clusters approximate user-perceived characters. JavaScript string length counts UTF-16 units, while UTF-8 bytes measure the encoded text size.

Supplementary code points use two UTF-16 units. Unpaired surrogate units are flagged; the UTF-8 encoder replaces them with U+FFFD when counting bytes. Textarea input is text, not a byte-preserving file reader: browsers may normalize pasted line endings.

NFC and NFD normalization

NFC and NFD are canonical normalization forms. For example, precomposed é and an e followed by a combining acute accent have different code-point sequences but can normalize to the same sequence. Normalization does not remove hidden characters or make similar-looking letters identical.

Compatibility normalization (NFKC/NFKD) is deliberately not offered here because it can change distinctions such as formatting and compatibility symbols. Normalization in this tool uses the browser's native implementation.

Frequently asked questions

Does a hidden character mean text was written by AI?

No. Invisible characters can come from typography, language shaping, applications, and normal copy/paste. This tool does not detect authorship or “AI watermarks.”

Does this validate the entire bidirectional algorithm?

No. It identifies the explicit bidi control code points and reports each character's bidi class. It does not simulate visual reordering, validate nesting, or certify text as safe.

Can I remove every invisible character safely?

No universal safe rule exists. Review characters in context, especially joining controls, direction controls, variation selectors, and non-breaking spaces. The tool leaves all cleaning options off until you choose them.

Is my pasted text sent to a server?

The inspector does not upload, save, or include pasted text in analytics events. Unicode names and properties are bundled with the site. The site's existing page analytics still run; avoid pasting secrets into any online page unless you trust the environment.

Why is there a size limit?

The limit keeps inspection responsive on phones. Oversized text is rejected without truncation. The visual preview shows 2,000 code points and the table is paginated, but accepted text is analyzed in full and copied in full.

Unicode references & data

Character names, categories, scripts, and selected properties are bundled from the Unicode 17.0.0 Character Database, including control aliases and algorithmic Hangul/CJK names. See UAX #9: Bidirectional Algorithm, UAX #15: Normalization Forms, UAX #29: Text Segmentation, and UTS #39: Unicode Security Mechanisms for the underlying concepts. The vendored data includes the Unicode data license and copyright notice.

Browse text tools · All ToolQuill tools