Menormalkan Unikod
Modul unicodedata Python menyediakan kaedah untuk memanipulasi rentetan Unicode. Satu tugas biasa ialah menormalkan rentetan supaya ia menggunakan perwakilan yang paling mudah, menghapuskan entiti Unikod pendua.
Masalah
Pertimbangkan contoh berikut:
import unicodedata char = "á" len(char) [unicodedata.name(c) for c in char]
Hasilnya menunjukkan bahawa rentetan "á" dinormalkan kepada bentuk termudahnya: "HURUF KECIL A LATIN A DENGAN AKUT". Walau bagaimanapun, jika kita membalikkan susunan aksara:
char = "á" len(char) [unicodedata.name(c) for c in char]
Hasilnya diuraikan kepada dua aksara berasingan: "HURUF KECIL A LATIN" dan "MENGABUKKAN AKSEN AKUT". Tingkah laku ini tidak konsisten dan boleh merumitkan manipulasi rentetan.
Penyelesaian
Untuk menormalkan rentetan Unicode secara konsisten, gunakan fungsi .normalize() daripada modul unicodedata. Borang NFC (Borang Biasa Dikarang) mengembalikan aksara yang digubah, manakala borang NFD (Borang Biasa Diurai) memberi anda aksara yang diuraikan, digabungkan.
Sebagai contoh, menggunakan gabungan Unikod yang sama dari atas:
print(ascii(unicodedata.normalize('NFC', '\u0061\u0301'))) print(ascii(unicodedata.normalize('NFD', '\u00e1')))
Output menunjukkan bahawa bentuk NFC menghasilkan aksara yang digubah "é", manakala bentuk NFD menghasilkan urutan terurai "au0301".
Borang tambahan, NFKC dan NFKD, berurusan dengan titik kod keserasian. Borang ini menggantikan aksara keserasian dengan bentuk kanoniknya. Contohnya:
unicodedata.normalize('NFKC', '\u2167')
Menukar titik kod lapan angka Rom (U 2167) kepada urutan ASCII "VIII".
Perhatikan bahawa bukan semua transformasi adalah komutatif. Mengurai aksara yang digubah dan kemudian menyusun semula ia mungkin tidak menghasilkan urutan asal. Piawaian Unicode mengekalkan senarai pengecualian untuk tingkah laku ini.
Atas ialah kandungan terperinci Bagaimanakah Modul `unicodedata` Python Menormalkan Rentetan Unikod untuk Manipulasi Konsisten?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!