Skip to content
| Marketplace
Sign in
Visual Studio Code>Linters>Invisible AI Character Detector & RemoverNew to Visual Studio Code? Get it now.
Invisible AI Character Detector & Remover

Invisible AI Character Detector & Remover

proflead

|
685 installs
| (0) | Free
Detect, visualize, and remove invisible Unicode characters commonly introduced by AI tools like ChatGPT, Claude, and Gemini. Detects AI-style invisible watermark characters (Unicode Cf, zero-widths, BOM, bidi controls, special spaces) and common confusables (curly quotes, dashes, minus). Visualize a
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

Invisible AI Character Detector & Remover

Detect • visualize • normalize invisible watermark characters and common “confusables” in text.

  • Watermarks (Unicode Cf): zero-widths (ZWSP/ZWNJ/ZWJ/WJ), BOM, bidi controls (LRE/RLE/LRO/RLO/PDF/isolates), etc.
  • Special spaces (optional): NBSP/NNBSP/Ideographic/En/Em/Thin/Hair/MMSP.
  • Confusables → ASCII: curly quotes, fancy dashes/minus, ellipsis, etc.

The extension can visualize problem characters as ⟦U+XXXX⟧, report exact locations, and normalize text by replacing where a safe ASCII alternative exists and removing the rest.


Why

Invisible controls and look-alike glyphs (e.g., U+2019 vs ', U+00A0 vs space) break search, parsing, and diffs, and are often used for watermarking or sneaky edits. This tool makes them obvious and fixes them safely.


Features

Visualize

  • Toggle to replace target characters with ⟦U+XXXX⟧ so you can see & search them.
  • Run the same command again to restore the original characters losslessly.

Normalize (Replace-or-Remove)

  • When a safe ASCII equivalent exists → replace (e.g., NBSP → space, curly quotes → '/").
  • Otherwise (true invisibles like ZWSP, bidi controls, BOM) → remove.

Report

  • Output channel report listing line:column and the Unicode code point for every target character found.

Workflows

  • In-place clean the current file.
  • Save a cleaned copy… to keep the original untouched.

Commands

  • Toggle Visualize (Replace ↔ Restore)
    Invisible AI Chart Detector: Toggle Visualize (Replace ↔ Restore)
    invisibleAiChartDetector.toggleVisualize

  • Normalize & Strip (replace if possible, remove otherwise)
    Invisible AI Chart Detector: Normalize & Strip (replace if possible, remove otherwise)
    invisibleAiChartDetector.removeAll

  • Scan & Report (Output)
    Invisible AI Chart Detector: Scan & Report (Output)
    invisibleAiChartDetector.scanReport

  • Clean In Place (replace if possible, remove otherwise)
    Invisible AI Chart Detector: Clean In Place (replace if possible, remove otherwise)
    invisibleAiChartDetector.cleanInPlace

  • Clean & Save Copy…
    Invisible AI Chart Detector: Clean & Save Copy…
    invisibleAiChartDetector.cleanSaveCopy

Note: the legacy commands Toggle (Diagnostics/Decorations) and Fix Double LFs were removed.


What gets replaced vs removed?

Replaced (→ ASCII)

Kind Unicode Replacement
NBSP family & special spaces U+00A0, U+202F, U+205F, U+3000, U+2000–U+200A space (U+0020)
Single quotes / primes U+2018, U+2019, U+201B, U+2032 '
Double quotes U+201C, U+201D, U+201F, U+2033 "
Dashes / minus U+2010, U+2011, U+2012, U+2013, U+2014, U+2015, U+2212 -
Ellipsis U+2026 ...
Soft hyphen U+00AD removed (acts like a layout hint)

Removed (no safe visible equivalent)

  • Unicode Cf format controls:
    ZWSP U+200B, ZWNJ U+200C, ZWJ U+200D, WJ U+2060, LRM/RLM/ALM U+200E/U+200F/U+061C, bidi format/overrides U+202A–U+202E/U+202C, isolates U+2066–U+2069, invisible math ops U+2061–U+2064, BOM U+FEFF, etc.
  • (Optional) Newlines if you enable that setting (off by default).

Normal ASCII space (U+0020), TAB (U+0009), and LF/CR are not targets unless you explicitly enable the newline options.


Settings

All settings are under Invisible AI Chart Detector:

  • invisibleAiChartDetector.watermark.includeUnicodeCf (default true)
    Treat all Unicode format controls (Cf) as targets.

  • invisibleAiChartDetector.watermark.includeSpaceFamily (default true)
    Treat NBSP/NNBSP/Ideographic/En/Em/Thin/Hair/MMSP as targets.

  • invisibleAiChartDetector.detect.includeNewlines (default false)
    Also flag LF/CR in diagnostics (usually keep false).

  • invisibleAiChartDetector.replace.format (default unicode)
    Visualization style. Regardless, we wrap as ⟦U+XXXX⟧ to restore safely.

  • invisibleAiChartDetector.replace.includeNewlines (default false)
    When visualizing, also turn LF/CR into visible tokens (not recommended).

  • invisibleAiChartDetector.remove.includeNewlines (default false)
    When cleaning, also delete LF/CR (dangerous; flattens files).

  • invisibleAiChartDetector.eolBadge (default false)
    Draw a small ⏎ at each line end (visual aid only).

Example settings.json snippet:

{
  "invisibleAiChartDetector.watermark.includeUnicodeCf": true,
  "invisibleAiChartDetector.watermark.includeSpaceFamily": true,
  "invisibleAiChartDetector.detect.includeNewlines": false
}

Privacy

This extension performs all scanning and cleaning locally and does not transmit your data. It does not include telemetry or analytics. See PRIVACY.md for details.

License

MIT © Vladislav Guzey (https://proflead.dev)

  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
© 2025 Microsoft