Unicode Normalization Studio (NFC • NFD • NFKC • NFKD)
Inspect canonical equivalence and compatibility decomposition across all 4 Unicode Technical Report #15 normalization forms in real time.
Decomposes characters and recombines them into precomposed canonical single codepoints. Default for web, HTML5, and Linux.
Separates base letters from their combining diacritical marks (e.g. "é" becomes "e" + "◌́"). Standard for Apple macOS file systems.
Replaces formatting variations (ligatures "fi" → "fi", superscripts "²" → "2", fractions "½" → "1/2") and recomposes canonically. Essential for search engines.
Applies compatibility decomposition without recombining. Ideal for OCR, natural language processing, and fuzzy text matching.
Character Canonical Decomposition Breakdown
See which characters in your input string are precomposed canonical letters versus combining sequences.
Unicode Normalization (NFC, NFD, NFKC, NFKD) Ready to Run
Using standard library unicodedata for canonical normalization.
Deep Dive into Unicode Technical Report #15: The Four Normalization Forms
In the Unicode standard, two sequences of code points are considered canonically equivalent if they represent the exact same abstract character and must be displayed with identical appearance and typography. For example, the character é can be encoded as a single precomposed character (U+00E9) or as a two-character combining sequence (base letter U+0065 ‘e’ followed by combining acute accent U+0301).
Without proper normalization, binary equality checks in JavaScript ('\u00E9' === 'e\u0301') return false! This creates catastrophic security vulnerabilities (such as authentication bypasses), corrupted database uniqueness constraints, and broken full-text search engines.
Which Form Should You Use?
Frequently Asked Questions (FAQs)
How does NFKC handle mathematical symbols and font ligatures?+
NFKC performs compatibility decomposition. It converts stylized font variations (like 𝔉 Fraktur or 𝐁 Bold) into standard ASCII letters, resolves ligatures like "fi" into "f" + "i", and turns superscript numbers "²" into standard digits "2".
Can Unicode normalization change the meaning of my text?+
Canonical normalization (NFC and NFD) never alters text semantics. Compatibility normalization (NFKC and NFKD), however, intentionally strips stylistic formatting (e.g. converting fraction ½ into 1/2), which is ideal for search indexing but not for preserving original typographical formatting.
How do I perform normalization in Python or Node.js?+
In JavaScript / Node.js, use string.normalize("NFC"). In Python, use import unicodedata; unicodedata.normalize("NFC", text).