GlyphSift
Style TextClean TextInspect UnicodeGuidesCompatibilityAll Tools
Open studio ↘
Home/Guides/Unicode Normalization Explained: NFC, NFD, NFKC, NFKD

Unicode guide

Unicode Normalization Explained: NFC, NFD, NFKC, NFKD

Unicode normalization converts strings into defined forms so text with equivalent representations can be compared consistently. The choice between canonical and compatibility forms determines how much information is preserved.

Written & reviewed by Jack Shi · Last reviewed 2026-08-24

01

Why identical-looking strings can differ

The letter é can be encoded as the precomposed U+00E9 or as U+0065 followed by U+0301. These sequences can render alike while a naive code-point-by-code-point comparison treats them as different strings.

Normalization puts canonically equivalent sequences into a consistent form. This prevents a composed-versus-decomposed difference from silently breaking exact comparison or search.

02

Canonical and compatibility forms

NFC applies canonical decomposition and then composes where possible, producing a canonical composed form. NFD keeps the canonical decomposed form instead.

NFKC and NFKD additionally apply compatibility decomposition. NFKC then composes the result, while NFKD leaves it decomposed. Compatibility processing can fold the fi ligature at U+FB01 to fi, full-width forms to ASCII, and styled mathematical letters to plain letters.

Inputfi A 𝐁
GlyphSift outputfi A B

GlyphSift's NFKC result folds the ligature, full-width A, and Mathematical Bold B to compatibility equivalents.

03

Choose the form for the job

NFC is a practical choice for storage and comparison when compatibility distinctions should remain. It makes canonical equivalents consistent without deliberately folding decorative or width variants to plain text.

NFKC is useful for loose search and matching, but it can destroy intended appearance. A bold or fancy name may become plain letters, so compatibility normalization is the wrong choice when preserving decorative text matters.

Try the behavior

Related tools

inspectUnicode Normalizer

Compare NFC, NFD, NFKC, and NFKD output with explicit compatibility warnings.

Open tool →
inspectUnicode Character Inspector

Inspect code points, offsets, UTF-8 bytes, scripts, categories, and risk flags character by character.

Open tool →

Primary standards

References

  • UAX #15: Unicode Normalization Forms
GlyphSiftStyle it. Clean it. Check it. Paste with confidence.
Style mapGuidesAboutAuthorContactPrivacyTermsEditorial

Independent copy-paste text tools · hello@glyphsift.com · Platform claims require evidence

Static Unicode maps target Unicode 17.0. Segmentation and normalization use the runtime's Unicode data.