Unicode Normalleştirme Hakkında Bilmek İstemediğiniz Her Şey
Kanonik Normalleştirme
Unicode, bazı karakterleri, özellikle de aksanlı karakterleri kodlamanın birden çok yolunu içerir. Kanonik normalleştirme, kod noktalarını kanonik bir kodlama formuna dönüştürür. Ortaya çıkan kod noktaları, yazı tiplerindeki veya işleme motorundaki herhangi bir hatayı engelleyen orijinallerle aynı görünmelidir.
Ne Zaman Kullanılmalı
Sonuçlar aynı göründüğünden, sonucun bit ile girdiyle aynı bit olmamasına tahammül edebildiğiniz sürece, bir dizeyi saklamadan veya görüntülemeden önce kanonik normalleştirme uygulamak her zaman güvenlidir.
Kanonik normalleştirme 2 şekilde gelir: NFD ve NFC. İkisi, birinin bu iki form arasında kayıpsız olarak dönüştürülebilmesi anlamında eşdeğerdir. NFC altında iki dizeyi karşılaştırmak, her zaman onları NFD altında karşılaştırmakla aynı sonucu verecektir.
NFD
NFD, karakterleri tamamen genişletmiştir. Bu, hesaplanacak daha hızlı normalleştirme formudur, ancak daha fazla kod noktasıyla sonuçlanır (yani daha fazla alan kullanır).
Henüz normalize edilmemiş iki dizeyi karşılaştırmak istiyorsanız, uyumluluk normalleştirmesine ihtiyacınız olduğunu bilmediğiniz sürece bu tercih edilen normalleştirme biçimidir.
NFC
NFC, NFD algoritmasını çalıştırdıktan sonra mümkün olduğunda kod noktalarını yeniden birleştirir. Bu biraz daha uzun sürer, ancak daha kısa dizelerle sonuçlanır.
Uyumluluk Normalleştirme
Unicode, gerçekten ait olmayan ancak eski karakter kümelerinde kullanılan birçok karakteri de içerir. Unicode, bu karakter kümelerindeki metnin Unicode olarak işlenmesine ve ardından kayıpsız olarak geri dönüştürülmesine izin vermek için bunları ekledi.
Uyumluluk normalleştirme, bunları karşılık gelen "gerçek" karakter dizisine dönüştürür ve ayrıca kanonik normalleştirme gerçekleştirir. Uyumluluk normalizasyonunun sonuçları orijinallerle aynı görünmeyebilir.
Biçimlendirme bilgisi içeren karakterler, içermeyenlerle değiştirilir. Örneğin karakter ⁹
dönüştürülür 9
. Diğerleri biçimlendirme farklılıklarını içermez. Örneğin, roma rakamı karakteri Ⅸ
normal harflere dönüştürülür IX
.
Açıktır ki, bu dönüşüm gerçekleştirildikten sonra, orijinal karakter setine kayıpsız olarak geri dönmek artık mümkün değildir.
Ne zaman kullanılmalı
Unicode Konsorsiyumu, uyumluluk normalizasyonunu bir ToUpperCase
dönüşüm gibi düşünmeyi önerir . Bu, bazı durumlarda faydalı olabilecek bir şeydir, ancak bunu ister istemez uygulamamalısınız.
Mükemmel bir kullanım senaryosu, muhtemelen 9
eşleşecek bir arama isteyeceğiniz için bir arama motoru olacaktır ⁹
.
Muhtemelen yapmamanız gereken bir şey, kullanıcıya uyumluluk normalleştirmesinin sonucunu göstermektir.
NFKC / NFKD
Uyumluluk normalleştirme formu, NFKD ve NFKC olmak üzere iki şekilde gelir. NFD ve C arasındaki ilişkiyle aynıdırlar.
NFKC'deki herhangi bir dize, doğası gereği NFC'dedir ve NFKD ve NFD için aynıdır. Böylece NFKD(x)=NFD(NFKC(x))
ve NFKC(x)=NFC(NFKD(x))
vb.
Sonuç
Şüpheniz varsa, kanonik normalleştirme ile gidin. Uygulanabilir alan / hız dengesine göre veya birlikte çalıştığınız bir şeyin gerektirdiklerine göre NFC veya NFD'yi seçin.