Text

Unicode Normalization & Confusable Character Inspector

Compare NFC, NFD, NFKC, and NFKD text, detect mixed scripts, invisible and bidi controls, and inspect common Unicode lookalikes.

Free to use No sign-up Runs in your browser

Tool workspace

All normalization and inspection stays in your browser. Text is not uploaded.

Exact
Different
NFC
Different
NFKC
Different
Skeleton
Match

Security findings

Cyrillic, Latin

2 finding(s)
HIGH · mixed-script
Text mixes Cyrillic, Latin scripts, which can indicate an identifier spoofing attempt.
indexes: 0, 1, 2, 3, 4, 5, 7, 8, 9
MEDIUM · common-confusable
One or more characters resemble common Latin letters or digits.
indexes: 0, 1

Normalization forms

NFCunchanged
раypal.com
NFDunchanged
раypal.com
NFKCunchanged
раypal.com
NFKDunchanged
раypal.com
Common-confusable skeletonheuristic, not full UTS #39
paypal.com

Code point inspection (10)

#CharacterCode pointUTF-8CategoryScriptFlags
0рU+0440D1 80LetterCyrillic→ p
1аU+0430D0 B0LetterCyrillic→ a
2yU+007979LetterLatin
3pU+007070LetterLatin
4aU+006161LetterLatin
5lU+006C6CLetterLatin
6.U+002E2EPunctuationCommon
7cU+006363LetterLatin
8oU+006F6FLetterLatin
9mU+006D6DLetterLatin

Why Unicode Text Can Look Equal but Compare Differently

Unicode can represent the same visible text with different code point sequences. NFC and NFD address canonical composition, while NFKC and NFKD also fold compatibility forms such as full-width letters, ligatures, and circled numbers. Separately, characters from Cyrillic, Greek, and other scripts can resemble Latin identifiers. This browser-only inspector exposes both normalization behavior and security-relevant code points without pretending that visual similarity alone proves malicious intent.

How to Inspect Unicode Normalization and Lookalikes

  1. 1Paste the hostname, account name, source-code identifier, filename, or text whose exact code points matter.
  2. 2Optionally enter trusted comparison text to check exact, NFC, NFKC, and common-confusable skeleton matches.
  3. 3Review high-severity mixed-script and bidirectional-control findings before informational normalization differences.
  4. 4Compare all four normalization outputs and copy the form required by your database, protocol, search index, or application.
  5. 5Inspect each code point, script, UTF-8 byte sequence, visibility flag, and mapped lookalike before accepting an identifier.

Practical Unicode Inspection Tasks

Investigate a lookalike domain or account

Compare an untrusted label against its expected spelling and reveal Cyrillic or Greek letters mixed into Latin text.

Debug inconsistent string equality

See whether composed and decomposed accents become equal under NFC even though their original code point sequences differ.

Find invisible source or filename characters

Expose zero-width and bidirectional controls that can make code, paths, or review diffs display in a misleading order.

Choose storage normalization

Preview canonical and compatibility forms before defining identifier, search, deduplication, or database normalization rules.

Frequently asked questions

Should I always use NFKC instead of NFC?

No. NFKC intentionally removes compatibility distinctions, so it can change full-width characters, ligatures, styled letters, circled numbers, and other presentation forms. It is often useful for controlled identifiers and search, while NFC is safer when compatibility distinctions must remain.

Does a matching confusable skeleton prove spoofing?

No. The skeleton is a warning signal for review, not proof of intent or identity. This tool uses a documented common-character heuristic rather than the complete Unicode UTS #39 confusables data set, and fonts can introduce additional visual similarities.

Why are emoji joiners marked invisible?

Emoji sequences can legitimately contain a zero-width joiner. The inspector exposes it because the same code point is invisible and meaningful in other contexts; interpret findings according to whether the input is natural text, emoji, source code, or an identifier.

Is my text sent to a server?

No. JavaScript normalization, script classification, skeleton generation, and UTF-8 inspection run locally in the browser.