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:
İ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 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.
Karakter kodlamaları | |
---|---|
Karakter setleri | |
ISO/IEC 8859 | |
Bibliyografik kullanım | |
Ulusal Standartlar | |
EUC | |
ISO/IEC 2022 | |
MacOS kod sayfaları | |
DOS kod sayfaları | |
Platforma özgü |
|
Unicode / ISO/IEC 10646 | |
Diğer |
|
İlgili konular |