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 11 Ağustos 2015 tarihinde Wayback Machine sitesinde arşivlendi. 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 bulunduran[1] 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.
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
)11000101
).001 0101 1111
).10xxxxxx
)10011111
).11000101 10011111
ş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 C5 9F
olarak gösterilir.
The Basic Multilingual Plane (BMP, or Plane 0) contains the common-use characters for all the modern scripts of the world as well as many historical and rare characters. By far the majority of all Unicode characters for almost all textual data can be found in the BMP.