Unicode Normalization Explained for Copy and Paste Text

Normalisation converts text into a canonical form so that strings which should be considered equal actually compare as equal. It matters because é can be stored two different ways that look identical, and without normalisation a search for one will not find the other.

The problem it solves

Unicode inherited precomposed characters from older encodings while also supporting base-plus-combining-mark sequences. The result is that é exists as U+00E9 and as U+0065 U+0301. Both render identically. Compare them byte by byte and they differ, so a login, a search or a duplicate check can fail on text that looks the same.

Four forms

NFC composes characters into their precomposed form where one exists, and is the usual choice for storage and for the web. NFD decomposes them into base plus marks. NFKC and NFKD add compatibility mappings, which additionally fold formatting distinctions — the fullwidth A becomes plain A, the ligature fi becomes fi, and the superscript ² becomes 2.

Why NFKC has a side effect worth knowing

Compatibility normalisation deliberately discards presentational distinctions. Run styled Unicode text through NFKC and much of it collapses back to plain letters, because those mathematical and fullwidth characters carry compatibility mappings to their ordinary equivalents. This is very likely what happened if a service silently converted your styled name back to plain text on save.

Choosing a form

Store and transmit in NFC; it is the web platform default and the recommendation in the relevant Unicode annex. Use NFKC for matching and deduplication, where you want A and A to be the same thing. Avoid normalising display text with NFKC if the presentational distinction is the point.

Where it bites in practice

Filenames copied between operating systems that prefer different forms. Usernames that appear taken but look available. Duplicate records that a database cannot see are duplicates. Search that misses an exact match. In every case the fix is to normalise consistently at the boundary rather than hoping the inputs agree.

References

Related tools and guides

Last updated September 2026 · Editorial policy · How we verify Unicode claims