unicode-rs/unicode-normalization

Unicode Normalization forms according to UAX#15 rules

198

stars

215

commits

Rust

primary language

Nov 3, 2025

updated

unicode-rs.github.io/unicode-normalization

README

unicode-normalization

Build Status Docs

Unicode character composition and decomposition utilities as described in Unicode Standard Annex #15.

This crate requires Rust 1.36+.

extern crate unicode_normalization;

use unicode_normalization::char::compose;
use unicode_normalization::UnicodeNormalization;

fn main() {
    assert_eq!(compose('A','\u{30a}'), Some('Å'));

    let s = "ÅΩ";
    let c = s.nfc().collect::<String>();
    assert_eq!(c, "ÅΩ");
}

crates.io

You can use this package in your project by adding the following to your Cargo.toml:

[dependencies]
unicode-normalization = "0.1.25"

no_std + alloc support

This crate is completely no_std + alloc compatible. This can be enabled by disabling the std feature, i.e. specifying default-features = false for this crate on your Cargo.toml.

Note about MSRV

Dependencies' MSRVs evolve independently of this crate's MSRV. Old versions of cargo will always try to get the most recent versions of the dependencies. Therefore, if you are having troubles compiling on an old Rust version, try to install an older version of the incompatible dependency.

For instance, to compile on Rust 1.36, tinyvec must be <=1.6.0

cargo update -p tinyvec --precise 1.6.0

Contributors

(top 30 of 31)

Manishearth

65 commits

sujayakar

23 commits

kwantam

19 commits

sunfishcode

19 commits

unicode-rs/unicode-normalization

Unicode Normalization forms according to UAX#15 rules

198

stars

215

commits

Rust

primary language

Nov 3, 2025

updated

unicode-rs.github.io/unicode-normalization

README

unicode-normalization

Build Status Docs

Unicode character composition and decomposition utilities as described in Unicode Standard Annex #15.

This crate requires Rust 1.36+.

extern crate unicode_normalization;

use unicode_normalization::char::compose;
use unicode_normalization::UnicodeNormalization;

fn main() {
    assert_eq!(compose('A','\u{30a}'), Some('Å'));

    let s = "ÅΩ";
    let c = s.nfc().collect::<String>();
    assert_eq!(c, "ÅΩ");
}

crates.io

You can use this package in your project by adding the following to your Cargo.toml:

[dependencies]
unicode-normalization = "0.1.25"

no_std + alloc support

This crate is completely no_std + alloc compatible. This can be enabled by disabling the std feature, i.e. specifying default-features = false for this crate on your Cargo.toml.

Note about MSRV

Dependencies' MSRVs evolve independently of this crate's MSRV. Old versions of cargo will always try to get the most recent versions of the dependencies. Therefore, if you are having troubles compiling on an old Rust version, try to install an older version of the incompatible dependency.

For instance, to compile on Rust 1.36, tinyvec must be <=1.6.0

cargo update -p tinyvec --precise 1.6.0

Contributors

(top 30 of 31)

Manishearth

65 commits

sujayakar

23 commits

kwantam

19 commits

sunfishcode

19 commits

Languages

Rust

99.5%