{ Unicode Normalizer }

// normalize unicode between NFC · NFD · NFKC · NFKD

Normalize Unicode text between NFC, NFD, NFKC, and NFKD forms instantly. Free browser-based tool — no upload, no sign-up required.

Paste any Unicode text — accented chars, CJK, emoji, etc.
NFC — Canonical Decomposition, followed by Canonical Composition. Standard form for web and databases.

Ready to normalize

Paste text, choose a form, and click Normalize

HOW TO USE

  1. 01
    Paste Your Text

    Enter any Unicode text into the input box — accented characters, Asian scripts, emoji, or mixed content.

  2. 02
    Select a Form

    Choose NFC, NFD, NFKC, or NFKD depending on your use case. NFC is the most common for web and databases.

  3. 03
    Normalize & Copy

    Click Normalize and copy the result. Toggle codepoints to inspect each character's Unicode value.

FEATURES

NFC NFD NFKC NFKD Codepoint Table Byte Stats Browser-based No Upload

USE CASES

  • 🔧 Normalize text before database storage
  • 🔧 Fix encoding issues in multilingual apps
  • 🔧 Prepare text for string comparison
  • 🔧 Debug accent/diacritic rendering bugs
  • 🔧 Convert compatibility characters (NFKC/NFKD)

WHAT IS THIS?

Unicode Normalization converts text into a standardized form so the same characters always have the same byte representation. This prevents silent bugs in string comparisons, database queries, and text processing where visually identical strings differ at the byte level.

RELATED TOOLS

FREQUENTLY ASKED QUESTIONS

What is Unicode normalization?

Unicode normalization converts text into a consistent representation. The same visible character can be encoded in multiple ways — for example, "é" can be a single precomposed codepoint (U+00E9) or the letter "e" followed by a combining accent (U+0065 + U+0301). Normalization ensures one canonical byte sequence.

What is the difference between NFC and NFD?

NFC (Canonical Decomposition + Canonical Composition) produces precomposed characters — "é" as one codepoint. NFD (Canonical Decomposition) decomposes into base character + combining marks — "e" + combining accent. Both are canonically equivalent; they differ only in byte representation.

When should I use NFKC or NFKD?

NFKC and NFKD apply compatibility decomposition in addition to canonical decomposition. This folds visually similar but semantically different characters — for example, the ligature "fi" becomes "fi", or fullwidth Latin letters become standard ASCII. Use NFKC for search indexing and text matching where compatibility matters.

Which form is best for web applications?

NFC is the recommended form for the web, HTML, and most databases. The W3C and most web standards specify NFC as the default. If you are storing user input or comparing strings, normalizing to NFC first prevents subtle bugs caused by different encodings of the same visible text.

Does normalization change the visible text?

For NFC and NFD, the rendered text looks identical — only the byte representation changes. For NFKC and NFKD, some compatibility characters may visually change: for instance, "①" (circled digit) may be mapped to "1", or fullwidth "A" to "A". Always preview the output when using NFKC/NFKD.

Is my text sent to a server?

No. All normalization happens in your browser via the JavaScript String.prototype.normalize() API. Your text never leaves your device. The tool is entirely client-side and works offline once loaded.

What does the codepoints table show?

The codepoints table lists each character in the normalized output along with its Unicode codepoint (e.g. U+00E9) and decimal value. This is useful for debugging encoding issues, verifying which combining characters are present, or understanding how a string is structured at the Unicode level.

Can I normalize emoji or CJK characters?

Yes. This tool handles the full Unicode character set including emoji, CJK (Chinese, Japanese, Korean) ideographs, Arabic, Hebrew, Thai, and all scripts supported by Unicode 15+. Emoji and most CJK characters are unaffected by NFC/NFD since they do not have combining forms, but NFKC/NFKD may affect compatibility ideographs.

What is a Unicode Normalizer?

A Unicode Normalizer converts text into one of the four standardized Unicode Normal Forms: NFC, NFD, NFKC, or NFKD. The Unicode Standard defines these forms to ensure that equivalent characters always have the same byte-level representation, which is essential for reliable string comparison, database storage, text search, and interoperability across systems.

The need for normalization arises because Unicode allows multiple binary representations for visually identical text. The accented character "é", for example, can be stored as the single precomposed codepoint U+00E9 (LATIN SMALL LETTER E WITH ACUTE) or as the two-codepoint sequence U+0065 (LATIN SMALL LETTER E) followed by U+0301 (COMBINING ACUTE ACCENT). Both render identically, but a byte-level string comparison will treat them as different strings — a source of silent, hard-to-debug bugs.

💡 Building multilingual web apps? MonsterONE offers unlimited downloads of web development assets — UI kits, templates, and more — worth checking out.

The Four Unicode Normalization Forms Explained

Unicode defines four normalization forms, each serving a different purpose:

Why Normalization Matters for Developers

Failing to normalize Unicode text is a common source of bugs in multilingual applications. Consider a user registration form that accepts usernames. If one user signs up as "José" (NFC, U+00E9) and another as "José" (NFD, U+0065 U+0301), a naive string comparison will treat them as different names — potentially allowing duplicate accounts that appear identical on screen.

Similar issues arise in:

How to Choose the Right Form

The right normalization form depends on your use case. For most web development — HTML content, database storage, user-generated text — NFC is the correct choice and matches the W3C recommendation. NFC produces compact, precomposed output that most rendering engines and fonts handle optimally.

NFD is useful when you need to strip diacritics: decompose to NFD, then filter out characters in the Unicode "Mn" (Mark, Nonspacing) category, then optionally re-encode to ASCII. This is a common technique for generating URL slugs from accented text or building case-insensitive search indexes for Western languages.

NFKC is the right choice for search indexes, fuzzy matching, or any scenario where compatibility equivalents should be treated as identical. It is the normalization form used by Python's casefold() and recommended by the Unicode Consortium for identifier comparison (UAX #31).

NFKD is primarily used in NLP pipelines and tokenizers where the most granular decomposition is desired before further processing.

Unicode Normalization in Programming Languages

Most modern languages provide built-in normalization support. In JavaScript, str.normalize("NFC") (or "NFD", "NFKC", "NFKD") is available in all modern browsers and Node.js. In Python, the unicodedata.normalize(form, string) function handles all four forms. PHP provides the Normalizer class from the intl extension. Java offers java.text.Normalizer, and Swift uses String decomposition methods.

The best practice is to normalize input text to NFC as early as possible — ideally at the point of ingestion (form submission, API request, file import) — so that all downstream code can assume a consistent representation without needing to handle multiple forms.

Understanding Codepoints and Combining Characters

A Unicode codepoint is an integer value in the range U+0000 to U+10FFFF assigned to a specific character or symbol. The codepoints table in this tool shows each character in the normalized output with its U+ notation and decimal value, making it easy to identify combining marks, variation selectors, zero-width characters, and other non-visible codepoints that might be present in your text.

Combining characters (Unicode category "M") are codepoints that attach to the preceding base character to form an accented or modified glyph. NFD and NFKD expose these as separate codepoints, while NFC and NFKC recombine them into precomposed forms wherever the Unicode standard defines a precomposed equivalent. Not all combining character sequences have a precomposed form — in those cases, NFC output may still contain combining marks.