UTF-8 8-bitlik bir Unicode dönüşüm biçimidir (İng: Unicode Transformation Format 'ın kısaltması). Unicode karakterlerini değişken sayıda 8 bitten oluşan bayt (kod birimi) gruplarıyla kodlamakta kullanılır. Rob Pike ve Ken Thompson tarafından geliştirilmiştir.
UTF-8 kodlaması Unicode karakterlerini 1-6 bayt uzunluğunda diziler olarak kodlar. ASCII kodlaması içinde 0-127 arasında kalan karakterler, Unicode standardında aynı kod noktalarıyla ifade edildiğinden aynen kendi kodları ile kullanılır, diğerleri ise bayt dizileri haline gelir.
Karakterlerin her birinin kendilerine Unicode tarafından atanan bir kod noktası vardır. Her kod noktası 0 ile 1.114.111 arasında bir sayıdır. Bu kod noktaları iki tabanına dönüştürülürken doğrudan taban dönüşümü yapılmak yerine çeşitli yöntemler kullanılmaktadır. Bu yöntemlerin her biri ayrı birer karakter kodlama biçimi olarak adlandırılır. UTF-8 kodlama biçimi kod noktalarını değişken sayıda kod birimlerinden oluşacak şekilde iki tabanına dönüştürmeye olanak vermektedir. Kod birimlerinin her biri 8 bit uzunluğundadır. Dolayısıyla UTF-8 ile kodlanan bir metinde her karakterin uzunluğu 8'in katıdır. Kodlama yapılırken kodlanmış metni işleyecek bir bilgisayar yazılımının karakterlerin başlangıç ve bitiş noktalarını bilebilmesine olanak sağlamak için kod birimlerinin içine işaretçi bazı bitlerin yerleştirilmesi gerekmektedir.
UTF-8 kodlama biçimi şu kurallara göre çalışmaktadır:
UTF-8'in tasarımı ilk olarak Dave Prosser'ın önerdiği ve daha sonra Ken
Thompson'ın üzerinde değişiklikler yaptığı
aşağıdaki tabloda görülebilir. Bu tablodaki kalıplar kullanılarak kod
noktasının bit sayısına uygun olan kalıp seçilip x
ile işaretli
kısımlara sağa dayalı olacak şekilde bitler yerleştirilmek ve geriye
kalan kısımlar 0 ile doldurulmak suretiyle karakter kodlanmış olur.
Kod noktasının bit sayısı | İlk kod noktası | Son kod noktası | Kod birimi (bayt) sayısı | 1. Bayt | 2. Bayt | 3. Bayt | 4. Bayt | 5. Bayt | 6. Bayt |
---|---|---|---|---|---|---|---|---|---|
7 | U+0000 | U+007F | 1 | 0xxxxxxx | |||||
11 | U+0080 | U+07FF | 2 | 110xxxxx | 10xxxxxx | ||||
16 | U+0800 | U+FFFF | 3 | 1110xxxx | 10xxxxxx | 10xxxxxx | |||
21 | U+10000 | U+1FFFFF | 4 | 11110xxx | 10xxxxxx | 10xxxxxx | 10xxxxxx | ||
26 | U+200000 | U+3FFFFFF | 5 | 111110xx | 10xxxxxx | 10xxxxxx | 10xxxxxx | 10xxxxxx | |
31 | U+4000000 | U+7FFFFFFF | 6 | 1111110x | 10xxxxxx | 10xxxxxx | 10xxxxxx | 10xxxxxx | 10xxxxxx |
Orijinal şartname 31 bite kadar olan tüm sayıları kapsamaktadır. Teorik olarak 31 bite kadar uzunluktaki sayıları UTF-8 ile kodlamak mümkün olsa bile, Kasım 2003'te çıkan RFC 3629 standardı ile UTF-8'in üst sınırı U+10FFFF olarak belirlenmiştir. Bunun nedeni diğer bir karakter kodlama biçimi olan UTF-16'nın kodlayabileceği en büyük kod noktasının U+10FFFF olmasıdır. Kodlama standartları arasında uyumluluk sağlanması ve hepsinin uzak gelecekte de sorunsuz olarak kullanılmaya devam edebilmesi için UTF-8'in üst sınırı da uygulamada U+10FFFF olarak belirlenmiştir. Ayrıca Unicode ve ISO 10646 yine UTF-16 ile uyumu korumak için karakterlere U+10FFFF'den daha büyük kod noktası atamamaya karar vermişlerdir. Bu yüzden yukarıdaki tabloda 5 ve 6 bayttan oluşan kalıpların tamamı ve 4 bayttan oluşan kalıpların da yarıya yakını günümüzde geçersizdir.
UTF-8 kodlamasının göze çarpan başlıca özellikleri aşağıdaki gibi listelenebilir:
0
dır. Dolayısıyla 7-bitlik ve 8-bitlik ASCII
ile kodlanmış metinler UTF-8 ayrıştırıcıları tarafından sorunsuzca
işlenebilir.1
ve daha sonra bir adet 0
ile başlar. Devam baytlarının
ise tamamı 10
ile başlamaktadır. Eğer kod noktası tek baytla
kodlanıyorsa bu bayt da doğrudan 0
ile başlamaktadır.0xxxxxxx
, 110xxxxx
, 1110xxxx
ve 11110xxx
bit
kalıpları karakter başlangıcını ve bir sonraki geçerli karakterin
başlangıcının kaç bayt sonra olduğunu açıkça işaret etmektedir.1
lerin sayısı devam eden
baytların sayısını açıkça belli etmektedir. Dolayısıyla karakterin
toplamda kaç bayt tarafından kodlandığı ve diğer karakterin nerede
başladığı devam baytlarını tek tek incelemeden anlaşılabilmektedir.
Dolayısıyla metinde karakter arama ve bulma işlemleri kolaylaşmış
olur.İlk 128 karakter (US-ASCII kümesindeki karakterlerin aynısı) tek baytla kodlanır. Sonraki 1.920 karakter ise iki baytla kodlanır. Bu 1.920 karakter neredeyse tüm Latin alfabeleri ve ayrıca Yunan, Kiril, Koptik, Ermeni, İbrani, Arap, Süryani ve Thaana alfabelerini ve eklemlenebilen diyakritik işaretleri kapsamaktadır. Yaygın kullanımdaki hemen hemen tüm karakterleri bulunduran1 Temel Çokdilli Düzlemin bir ve iki baytla kodlananlar dışındaki tüm karakteri için üç bayt gerekir. Çin Japon ve Kore karakterlerinden pek yaygın kullanılmayanlar, çeşitli tarihi yazı biçimleri, matematiksel simgeler, ve emojinin bulunduğu diğer Unicode düzlemlerindeki karakterler de dört bayt ile kodlanır.
ş harfinin UTF-8 ile nasıl kodlanacağını inceleyelim:
015F
sayısı iki
tabanında 001 0101 1111
şeklinde
gösterilmektedir. Soldaki iki adet sıfır tablodaki kalıpta 11 bitlik
boş yerin tamamını kaplamak için eklenmiştir.110xxxxx
)110
).10xxxxxx
)10
).110`` 10
şeklinde kodlanmaktadır. İki tabanındaki bu
uzun bit dizilimi yazımı daha kolay olsun diye sıklıkla on altı
tabanına dönüştürülerek
olarak gösterilir.Orijinal kaynak: utf-8. Creative Commons Atıf-BenzerPaylaşım Lisansı ile paylaşılmıştır.
Ne Demek sitesindeki bilgiler kullanıcılar vasıtasıyla veya otomatik oluşturulmuştur. Buradaki bilgilerin doğru olduğu garanti edilmez. Düzeltilmesi gereken bilgi olduğunu düşünüyorsanız bizimle iletişime geçiniz. Her türlü görüş, destek ve önerileriniz için iletisim@nedemek.page