Unicode, birçok farklı kodlamaya sahip olma konusunu ele almak için tasarlanmamıştır.
Unicode, kullanılan kod sayfasına bağlı olarak birçok farklı şeyi temsil eden bir sayının tümünün etrafından dolaşmak için tasarlanmıştır. 0 - 127 arasındaki numaralar, herhangi bir Ansi kod sayfasındaki aynı karakterleri temsil eder. ASCII şeması veya karakter kümesi olarak da bilinir. 256 karaktere izin veren Ansi kod sayfalarında, 128 - 255 arasındaki sayılar, farklı kod sayfalarındaki farklı karakterleri temsil eder.
Örneğin
- 57 $, tüm kod sayfalarında büyük W harfidir, ancak
- $ EC, kod sayfası 437'deki (ABD) belirsizlik sembolünü gösterir, ancak kod sayfası 775'teki (Baltık) "LATİN KÜÇÜK HARF NEDİR
- Cent İşareti, kod sayfası 437’de 9B’dir;
Unicode'un yaptığı her şeyi tersine çevirmekti. Unicode'da "yeniden kullanım" yoktur. Her sayı tek bir benzersiz karakter gösterir. Unicode'daki $ 00A2 sayısı yüzde işaretidir ve yüzde işareti Unicode tanımında başka hiçbir yerde görünmez.
Öyleyse neden bu kadar çok Unicode kodlaması var? UTF-8, UTF-16, vs. gibi (esasen) aynı olanın birden fazla versiyonu bile
Aynı kodlamanın birden fazla sürümü yok. Aynı Unicode karakter tanımı haritasının çoklu kodlamaları vardır ve bunlar Unicode'da bulunan çeşitli dilsel düzlemlerin farklı kullanımları için depolama gereksinimlerini yönetmek üzere "icat edilmiştir".
Unicode, 4.294.967.295 benzersiz karakterleri tanımlar (veya tanımlayacak alana sahiptir). Bunları herhangi bir algoritmik dönüşüm yapmadan disk / bellek deposuyla eşlemek istiyorsanız, karakter başına 4 bayta ihtiyacınız vardır. Tüm dil düzlemlerinden karakterleri içeren metinleri saklamanız gerekiyorsa, UTF-32 (temel olarak düz 1 karakter - unicode tanımının 4 bayt depolama kodlamasıdır) muhtemelen ihtiyacınız olan şeydir.
Ancak neredeyse hiç bir metin tüm dilsel düzlemlerden karakter kullanmaz. Ve sonra karakter başına 4 bayt kullanmak büyük bir atık gibi görünüyor. Özellikle dünyadaki birçok dilin Temel Çok Dilli Düzlem (BMP) olarak bilinen dilde tanımlandığını göz önüne aldığınızda: Unicode tanımının ilk 65536 sayısı.
UTF-16'nın girdiği yer de burasıdır. BMP'den yalnızca karakter kullanıyorsanız, UTF-16 karakter başına yalnızca iki bayt kullanarak bunu verimli bir şekilde kaydeder. BMP dışındaki karakterler için yalnızca daha fazla bayt kullanır. UTF-16LE (Little Endian) ve UTF-16BE (Big Endian) arasındaki fark, yalnızca sayıların bilgisayar belleğinde nasıl temsil edildiğiyle ilgilidir ( A0
onaltılık hex = A0 veya $ 0A anlamına gelir).
Metniniz, Batı Avrupa dillerindeki çoğu metin gibi, daha az farklı karakter kullanıyorsa, metinleriniz için depolama gereksinimlerini daha da kısıtlamak isteyeceksiniz. Bu nedenle, ASCII şemasında bulunan karakterleri (ilk 128 sayı) ve Ansi karakterlerinden (çeşitli kod sayfalarının ikinci 128 sayısı) bir seçimde bulunan karakterleri depolamak için tek bir bayt kullanan UTF-8. Bu "en çok kullanılan karakter" kümesinin dışındaki karakterler için yalnızca daha fazla bayt kullanır.
Yani özetlemek için:
- Unicode, dünyadaki tüm dillerdeki (ve önyüklenecek bazı Klingon) karakterlerin ve daha sonra bazılarının (matematiksel, müzikal vb.) Benzersiz bir sayıya eşlenmesidir.
- Kodlamalar, metinlerin içindeki karakterlerin "ortalama kullanımı" göz önüne alındığında, bu benzersiz karakter haritasının sayılarını mümkün olduğu kadar verimli bir şekilde kullanarak metinleri depolamak için tanımlanmış algoritmalardır.