[API reference](https://evolu.dev/docs/api-reference) › [@evolu/common](https://evolu.dev/docs/api-reference/common) › [Type](https://evolu.dev/docs/api-reference/common/Type) › normalized

```ts
function normalized<Form extends UnicodeNormalizationForm>(
  form: Form & ValidateLiteral<Form>,
): BrandFactory<`Normalized${Form}`, string, NormalizedError<Form>>;
```

Defined in: [packages/common/src/Type.ts:7727](https://github.com/evoluhq/evolu/blob/bc4578a260dd15d5bbf94b83765ca05984d194cb/packages/common/src/Type.ts#L7727)

String [Brand](https://evolu.dev/docs/api-reference/common/Brand/interfaces/Brand) for text already in a Unicode normalization form.

Unicode can encode the same text in more than one way: `é` is either one
precomposed code point or `e` followed by a combining accent. Both look the
same but are different strings, so equality checks, lookups, and unique
constraints treat them as different values. Validation leaves the text
unchanged; use [normalize](https://evolu.dev/docs/api-reference/common/Type/functions/normalize) to convert text before validating it.

Prefer NFC for text. NFKC also replaces compatibility characters, such as the
`ﬁ` ligature with `fi`, so prefer it for identifiers compared for equality.
The form must be one concrete string literal so different forms have distinct
brands. A normalized string is not necessarily [wellFormed](https://evolu.dev/docs/api-reference/common/Type/variables/wellFormed), because
normalization leaves lone surrogates unchanged.

Unicode's stability policy keeps the result for assigned characters the same
across engine versions, but text with characters that an older engine does
not know yet can be judged differently there.

### Example

```ts
import { assertErr, assertOk, normalized, String } from "@evolu/common";

const Text = normalized("NFC")(String);

assertOk(Text.fromUnknown("caf\u00E9"), "caf\u00E9");
assertErr(Text.fromUnknown("cafe\u0301"));
```