Inspect Unicode · browser-local
Confusable Character Checker
Find characters that look like ordinary letters but are not, such as a Cyrillic that imitates a Latin a. GlyphSift lists each look-alike with the ASCII letter it mimics and its position.
- Index state
- eligible
- Reviewed
- 2026-08-24
- Input limit
- 5,000 graphemes
Confusable Character Checker
U+0430а looks like “a”Cyrillic · offset 0
Good fit
Use this tool when
- You are checking a name, handle, or URL for look-alikes.
- You want to explain why two strings look identical but differ.
- You are reviewing content for impersonation risk.
Keep the original
Avoid it when
- You need the complete Unicode confusable table.
- You want to auto-replace characters rather than review them.
- The text is expected to contain those scripts.
Reviewed truth vectors
Examples that expose the edge cases
аpple1 confusable found: а looks like “a”The first letter is Cyrillic, not Latin.
apple0 foundAll-ASCII text reports nothing.
pаypаl2 confusables foundTwo Cyrillic letters imitate Latin ones.
Transparent implementation
How it works
- 01
Compare each character against a reviewed set of common ASCII look-alikes.
- 02
Record the ASCII letter each match imitates.
- 03
List every hit with its code point, script, and position.
Known limitations
What the result cannot promise
It uses a curated set, not the full UTS #39 confusable data.
A skeleton match is a detection aid, not a safe replacement.
It focuses on ASCII look-alikes, not every possible confusion.
Questions before copying
Frequently asked questions
Is this the full Unicode confusable list?
No. It uses a practical, curated set of common ASCII look-alikes rather than the complete UTS #39 table.
Should I replace the flagged characters?
Only after review. The mimicked letter is a hint, not an automatic correction, since the original may be intentional.
Why does a name look identical but fail a match?
It may contain look-alike characters from another script; this checker reveals them.
Experience, expertise & trust
How we verify this tool
Automated evidence
- Tool-contract & coverage suite30 deterministic cases
tests/tools-30.test.mjs mirrors the ToolRunner dispatch and asserts every registered engineId returns the contracted output shape, plus a coverage guard so no tool silently drops characters.
Run in: node --test after a production build (vinext build) - Rendered-HTML suite12 deterministic cases
tests/rendered-html.test.mjs renders the deployed server bundle and asserts the Unicode-version manifest and each wave's tool markup are present in the server-rendered HTML.
Run in: node --test against the built dist/server bundle - Unicode inspection suite11 deterministic cases
tests/unicode-inspection.test.mjs verifies grapheme/code-point/byte counting and hidden-control detection using explicit \u escapes for combining and bidirectional characters.
Run in: node --test against the runtime's Unicode data - Compatibility risk suite13 deterministic cases
tests/compatibility.test.mjs checks that bidirectional controls, invisible characters, mixed scripts, and NFKC-changing input raise the documented risk status, and that safe-text stripping preserves ordinary content.
Run in: node --test, deterministic analyzer
Standards this tool follows
- UTS #39: Unicode Security Mechanisms
Confusable and mixed-script detection methodology.
- UAX #9: Unicode Bidirectional Algorithm
Bidirectional control characters flagged during inspection.
- UAX #15: Unicode Normalization Forms
NFC/NFKC normalization comparisons.
- RFC 3629: UTF-8
Byte-length counting for the UTF-8 encoding.