Materi
Normalisasi mengubah teks ke satu bentuk baku, sehingga teks yang tampak sama juga sama urutan code point-nya. Unicode Standard Annex #15 menetapkan empat bentuk: NFC dan NFD untuk kesetaraan kanonik, serta NFKC dan NFKD untuk kesetaraan kompatibilitas. Di Python, keempatnya tersedia lewat unicodedata.normalize(bentuk, teks).
| Bentuk | Yang dilakukan | Contoh |
|---|---|---|
| NFD | Memecah huruf tersusun menjadi huruf dasar dan tanda gabung | é (1 code point) → e + U+0301 (2) |
| NFC | Memecah, lalu menyusun kembali ke bentuk tersusun | e + U+0301 → é |
| NFKD | Seperti NFD, ditambah mengganti karakter kompatibilitas | fi (ligatur) → f i |
| NFKC | Seperti NFC, ditambah mengganti karakter kompatibilitas | 2026 (lebar penuh) → 2026 |
import unicodedata
a = "Jose\u0301" # e + aksen gabung
b = "Jos\u00e9" # é tersusun
print(a == b) # False
print(unicodedata.normalize("NFC", a) == b) # True
print(unicodedata.normalize("NFKC", "Rp5")) # Rp5Normalisasi dipakai sebelum membandingkan, mengelompokkan, atau menghitung teks dari sumber berbeda. NFC mempertahankan tampilan teks, sehingga cocok untuk teks yang disimpan dan dicetak ulang. NFKC lebih jauh: ia menyamakan huruf lebar penuh, ligatur, dan angka superskrip dengan huruf dan angka padanannya. Hasilnya cocok untuk kunci pencarian, tetapi tampilan ikut berubah, misalnya ² menjadi 2.
unicodedata.combining(c) memberi angka bukan nol untuk tanda gabung. Menormalkan ke NFD lalu membuang karakter yang combining-nya bukan nol menghasilkan teks tanpa aksen. Cara ini hanya menyentuh tanda gabung, jadi huruf seperti ø yang tidak punya dekomposisi tetap tertinggal apa adanya.