Gesaan dan konteks
Dua rentetan kelihatan serupa tetapi dibandingkan secara berbeza dalam semakan keunikan pangkalan data, carian, atau perbandingan nama fail. Terangkan aksara gabungan dan prakomposisi, empat bentuk penormalan, sempadan input dan storan, serta sebab penormalan tidak menggantikan case folding, peraturan bahasa, atau dasar keselamatan.
Perkara yang diuji oleh penemu duga
- Sama ada anda memahami canonical equivalence berbanding compatibility equivalence.
- Sama ada anda memilih NFC, NFD, NFKC, atau NFKD berdasarkan semantik perniagaan.
- Sama ada anda mengambil kira versi Unicode, collation pangkalan data, indeks, dan ketekalan rentas perkhidmatan.
- Sama ada anda boleh mengenal pasti risiko kehilangan maklumat daripada compatibility folding.
Soalan penjelasan sebelum menjawab
Sahkan sama ada medan tersebut ialah teks paparan, pengecam log masuk, kunci carian, nama fail, atau pengecam sensitif keselamatan; tanya tentang bahasa, huruf besar/kecil, versi Unicode, collation, dan sama ada input asal mesti dikekalkan. Sistem boleh menyimpan input asal dan menyimpan kunci perbandingan yang telah dinormalkan.
Rangka jawapan 30 saat
Unicode membolehkan satu teks yang kelihatan mempunyai berbilang jujukan titik kod. NFC melakukan canonical decomposition diikuti oleh komposisi; NFD melakukan canonical decomposition. NFKC dan NFKD juga memproses compatibility equivalence dan mungkin melipat aksara dengan pemformatan atau jangkaan semantik yang berbeza. NFC ialah pilihan biasa untuk teks umum; compatibility folding memerlukan toleransi yang jelas terhadap kehilangan maklumat. Tetapkan versi Unicode dan pastikan penormalan diasingkan daripada case folding, dasar skrip, dan semakan keselamatan.
Analisis mendalam langkah demi langkah
1. Canonical equivalence dan komposisi
Aksara prakomposisi dan aksara asas berserta tanda gabungan boleh kelihatan sama dan setara secara kanonik. NFD menguraikannya dan NFC menggabungkannya mengikut piawaian. Bentuk penormalan adalah idempoten: menggunakannya semula tidak akan terus mengubah rentetan tersebut.
2. Kos compatibility equivalence
NFKD melakukan compatibility decomposition dan NFKC menggabungkannya selepas itu. Sesetengah varian fon, bentuk lebar penuh (full-width), atau aksara hiasan boleh dipetakan kepada perwakilan asas. Gunakan ini untuk dasar carian atau perbandingan yang luas secara eksplisit, bukan secara automatik untuk kata laluan, teks undang-undang, atau kandungan yang rupanya mesti dipelihara.
3. Sempadan storan dan keselamatan
Kekalkan input asal dan jana kunci perbandingan berversi. Tentukan keunikan, tokenisasi, case folding, dan semakan aksara yang mengelirukan (script-confusable) secara berasingan. Untuk nama log masuk, domain, atau pengecam kebenaran, ikuti protokol dan profil keselamatan yang berkaitan; NFKC sahaja bukanlah pertahanan yang lengkap.
Contoh jawapan berkualiti tinggi
Saya mengasingkan nilai paparan dan perbandingan. Unicode membenarkan aksara prakomposisi dan jujukan gabungan mewakili teks kanonik yang sama, jadi perbandingan titik kod boleh menghasilkan ketidakpadanan yang salah. NFD menguraikan dan NFC menyusun semula; NFKD dan NFKC juga menggunakan pemetaan keserasian, yang boleh membuang maklumat pemformatan. Saya biasanya akan menggunakan NFC untuk teks umum dan menetapkan versi Unicode yang disokong. Kunci carian boleh menggunakan NFKC hanya apabila kehilangan maklumat itu disengajakan, bersama-sama dengan case folding dan peraturan bahasa. Simpan input asal, berserta kunci dinormalkan yang berversi untuk keunikan pangkalan data. Untuk kata laluan, tandatangan, teks audit, dan pengecam keselamatan, saya tidak akan menambah compatibility folding di luar protokol; saya akan menggunakan pengecam dan semakan confusable yang ditentukan. Ujian meliputi urutan gabungan, penormalan berulang, input berbilang bahasa, peningkatan versi, dan perbezaan collation.
Kesilapan lazim
- Mengatakan bahawa NFC dan NFKC adalah setara.
- Menganggap penormalan sebagai case folding, transliterasi, atau pembuangan aksen.
- Menggunakan NFKC pada setiap medan dan kehilangan maklumat aksara keserasian.
- Menormalkan hanya dalam aplikasi sambil mengabaikan indeks pangkalan data dan versi perkhidmatan.
- Menganggap persamaan visual sebagai kesetaraan keselamatan dan terlepas pandang script confusables.
Soalan susulan dan jawapan
Mengapa tidak menyimpan rentetan yang dinormalkan sahaja?
Konteks paparan, audit, atau undang-undang mungkin memerlukan input asal. Menyimpan kedua-duanya mengelakkan penukaran tidak boleh balik daripada menjejaskan pengguna sambil menyokong semakan keunikan yang stabil.
Bolehkah peningkatan versi Unicode menjejaskan keunikan?
Ia boleh menjejaskan titik kod yang belum diuntukkan atau data penormalan. Rekodkan versi penormalan, kira semula kunci di luar talian, semak pertembungan (collisions), dan migrasikan indeks secara berperingkat.
Adakah penormalan menghalang serangan homoglif?
Tidak sepenuhnya. Penormalan merangkumi hubungan kesetaraan yang ditakrifkan; keselamatan juga memerlukan sekatan skrip, pengesanan confusable, profil pengecam protokol, dan semakan.