Inspect text
.length · Java/C# length · DOM APIs
len() · Rust chars().count()
len() · DB storage/limits
Cluster by cluster
Each card is one grapheme cluster — one "character" as you see it. Flagged characters appear as dashed reveal boxes. Select a card for bytes, class chips and copy-as escapes.
Cluster detail
Flagged characters
Scanned against a hand-verified catalog of ~70 risky characters (zero-width, bidi/Trojan Source, look-alike spaces, line separators, confusables). Every entry cites the Unicode document that defines it. Absence of a warning is not a "safe" verdict — the confusable list is a curated subset of UTS #39.
Normalization diff — NFC · NFD · NFKC · NFKD
Computed by this browser's String.normalize (UAX #15). "changed" means the
form differs from your input; unstable clusters are marked.
Compare two strings
For "these look identical but don't match" bugs: raw equality, NFC equality, the first divergent codepoint, and any flagged characters that explain a visual match that isn't a real match.
Clean copy
Mechanical, per-category fixes only — each toggle states exactly what it replaces, every pass is idempotent by test, and nothing here guesses intent or repairs encoding damage (mojibake).
Honest limits
- Cluster counts follow this browser's
Intl.Segmenterand its Unicode version — e.g. Devanagari conjuncts (नमस्ते) can segment differently on older engines. unicodex reports the host engine's answer; its self-tests pin only version-stable fixtures. - No name database: arbitrary codepoints show
U+hexplus engine-derived class chips, not the official Unicode name. Names appear only for the ~70 flagged catalog entries. - Confusable flags are a curated ~24-letter subset of UTS #39 — absence of a warning is not proof a string is safe, and unicodex never says "safe".
- Rendering varies by device fonts — a cluster shown here may draw as tofu or differently elsewhere. unicodex inspects what text is, not how any device draws it.
- Clean-copy performs only the listed mechanical replacements; it never guesses intent and cannot repair encoding damage (mojibake).
- Autosaved input lives in this browser's localStorage (toggleable, one-tap clear); clearing site data
erases it. Nothing is ever transmitted — enforced by CSP
connect-src 'none'.