Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimanakah Modul `unicodedata` Python Menormalkan Rentetan Unikod untuk Manipulasi Konsisten?

Bagaimanakah Modul `unicodedata` Python Menormalkan Rentetan Unikod untuk Manipulasi Konsisten?

DDD
DDDasal
2024-12-01 02:05:09227semak imbas

How Can Python's `unicodedata` Module Normalize Unicode Strings for Consistent Manipulation?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn