# perldoc > Unicode::Normalize

---
type: CommandReference
command: Unicode::Normalize
mode: perldoc
section: ""
source: perldoc
---

## Quick Reference

- `NFD($string)` — Normalization Form D (canonical decomposition)
- `NFC($string)` — Normalization Form C (canonical decomposition + composition)
- `NFKD($string)` — Normalization Form KD (compatibility decomposition)
- `NFKC($string)` — Normalization Form KC (compatibility decomposition + composition)
- `normalize($form, $string)` — Normalize to any form (C, D, KC, KD, FCD, FCC)
- `check($form, $string)` — Quick check if string is in a given normalization form
- `decompose($string [, $useCompatMapping])` — Decompose string (canonical or compatibility)
- `compose($string)` — Canonical composition of a decomposed string

## Name

Unicode::Normalize — Unicode Normalization Forms

## Synopsis

perl
use Unicode::Normalize;

$NFD_string  = NFD($string);
$NFC_string  = NFC($string);
$NFKD_string = NFKD($string);
$NFKC_string = NFKC($string);

use Unicode::Normalize 'normalize';
$NFD_string  = normalize('D',  $string);
$NFC_string  = normalize('C',  $string);
$NFKD_string = normalize('KD', $string);
$NFKC_string = normalize('KC', $string);
## Description

Parameters: `$string` is a string under character semantics (see [perlunicode](https://perldoc.perl.org/perlunicode)). `$code_point` is an unsigned integer representing a Unicode code point.

### Normalization Forms

- `NFD($string)` — Normalization Form D (canonical decomposition)
- `NFC($string)` — Normalization Form C (canonical decomposition + canonical composition)
- `NFKD($string)` — Normalization Form KD (compatibility decomposition)
- `NFKC($string)` — Normalization Form KC (compatibility decomposition + canonical composition)
- `FCD($string)` — Fast C or D form (UTN #5); returns string unmodified if already in FCD
- `FCC($string)` — Fast C Contiguous form (UTN #5); unique
- `normalize($form_name, $string)` — Returns the normalization form specified by `$form_name`. Valid names: `'C'`/`'NFC'`, `'D'`/`'NFD'`, `'KC'`/`'NFKC'`, `'KD'`/`'NFKD'`, `'FCD'`, `'FCC'`

### Decomposition and Composition

- `decompose($string [, $useCompatMapping])` — Returns concatenation of decompositions. If second parameter is true, uses compatibility decomposition. Result may need reordering.
- `reorder($string)` — Reorders combining characters according to Canonical Ordering Behavior.
- `compose($string)` — Canonical composition without decomposition. Use on NFD/NFKD to get NFC/NFKC.
- `splitOnLastStarter($normalized)` — Returns (processed, unprocessed) split at last starter. Starter = combining class zero. Useful for concatenating normalized strings.
- `normalize_partial($form, $unprocessed)` — Wrapper for `normalize()` + `splitOnLastStarter()`. Modifies `$unprocessed` as side-effect.
- `NFD_partial($unprocessed)`, `NFC_partial($unprocessed)`, `NFKD_partial($unprocessed)`, `NFKC_partial($unprocessed)` — Partial normalization wrappers, modify `$unprocessed`.

### Quick Check

Functions return `YES` (1), `NO` (empty string), or `MAYBE` (`undef`). MAYBE possible only for NFC, NFKC, FCC.

- `checkNFD($string)` — returns 1 if YES, '' if NO
- `checkNFC($string)` — returns 1 if YES, '' if NO, `undef` if MAYBE
- `checkNFKD($string)` — returns 1 if YES, '' if NO
- `checkNFKC($string)` — returns 1 if YES, '' if NO, `undef` if MAYBE
- `checkFCD($string)` — returns 1 if YES, '' if NO
- `checkFCC($string)` — returns 1 if YES, '' if NO, `undef` if MAYBE
- `check($form_name, $string)` — Generic quick check using same form names as `normalize()`.

For exact check, compare with `NFC($string)` etc.

### Character Data

- `getCanon($code_point)` — Returns canonical decomposition string, or `undef` if not decomposable.
- `getCompat($code_point)` — Returns compatibility decomposition string, or `undef`.
- `getComposite($code_point_here, $code_point_next)` — Returns composite code point if composable, else `undef`.
- `getCombinClass($code_point)` — Returns combining class as integer.
- `isComp2nd($code_point)` — Boolean: may be composed with previous character.
- `isExclusion($code_point)` — Boolean: composition exclusion.
- `isSingleton($code_point)` — Boolean: singleton.
- `isNonStDecomp($code_point)` — Boolean: non-starter decomposition.
- `isComp_Ex($code_point)` — Derived property Full_Composition_Exclusion.
- `isNFD_NO($code_point)`, `isNFC_NO($code_point)`, `isNFC_MAYBE($code_point)`, `isNFKD_NO($code_point)`, `isNFKC_NO($code_point)`, `isNFKC_MAYBE($code_point)` — Derived quick check properties.

## Export

`NFC`, `NFD`, `NFKC`, `NFKD` are exported by default. `normalize` and other functions are available on request.

## CAVEATS

The Unicode version used depends on the perl version. See table in original documentation for mapping. Older perls may have erroneous decomposition mappings for a few CJK characters. The module uses the revised definition of canonical composition (Unicode 4.1.0+) since version 0.07; it does not support the older definition.

## See Also

- [Unicode Normalization Forms - UAX #15](http://www.unicode.org/reports/tr15/)
- [Composition Exclusion Table](http://www.unicode.org/Public/UNIDATA/CompositionExclusions.txt)
- [Derived Normalization Properties](http://www.unicode.org/Public/UNIDATA/DerivedNormalizationProps.txt)
- [Normalization Corrections](http://www.unicode.org/Public/UNIDATA/NormalizationCorrections.txt)
- [Public Review Issue #29](http://www.unicode.org/review/pr-29.html)
- [Canonical Equivalence in Applications - UTN #5](http://www.unicode.org/notes/tn5/)
- [perlunicode](https://perldoc.perl.org/perlunicode)