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.
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.
- 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.
- When a safe ASCII equivalent exists → replace (e.g., NBSP → space, curly quotes →
'/"). - Otherwise (true invisibles like ZWSP, bidi controls, BOM) → remove.
- Output channel report listing
line:columnand the Unicode code point for every target character found.
- In-place clean the current file.
- Save a cleaned copy… to keep the original untouched.
-
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.
| 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) |
- Unicode
Cfformat controls:
ZWSPU+200B, ZWNJU+200C, ZWJU+200D, WJU+2060, LRM/RLM/ALMU+200E/U+200F/U+061C, bidi format/overridesU+202A–U+202E/U+202C, isolatesU+2066–U+2069, invisible math opsU+2061–U+2064, BOMU+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.
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
}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.
MIT © Vladislav Guzey (https://proflead.dev)