# Unicode normalization in Python / Go / Rust NFC, NFD, NFKC, NFKD ```python import unicodedata def conv_and_print(form): src = "it’säå(1−2)ドブロク㍿" norm = unicodedata.normalize(form, src) print(f"{form}: {norm} ({len(norm.encode('utf-8'))} bytes)") conv_and_print("NFC") conv_and_print("NFD") conv_and_print("NFKC") conv_and_print("NFKD") ``` ```go package main import ( "fmt" "golang.org/x/text/unicode/norm" ) func main() { src := "it’säå(1−2)ドブロク㍿" forms := map[string]norm.Form{"NFC": norm.NFC, "NFD": norm.NFD, "NFKC": norm.NFKC, "NFKD": norm.NFKD} for name, form := range forms { norm := form.String(src) fmt.Printf("%s: %v (%v bytes)\n", name, norm, len(norm)) } } ``` ```rust fn main() { use unicode_normalization::UnicodeNormalization; let s = "it’säå(1−2)ドブロク㍿"; let print = |form, norm: &str| println!("{}: {} ({} bytes)", form, norm, norm.len()); print("NFC", &s.nfc().collect::()); print("NFD", &s.nfd().collect::()); print("NFKC", &s.nfkc().collect::()); print("NFKD", &s.nfkd().collect::()); } ```