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
Lepaskan: 2024-12-01 02:05:09
asal
219 orang telah melayarinya

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]
Salin selepas log masuk

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]
Salin selepas log masuk

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')))
Salin selepas log masuk

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')
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan