UTF-8

Vikipedi, özgür ansiklopedi
Atla: kullan, ara

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.

Özellikleri[değiştir | kaynağı değiştir]

Karakterlerin her birinin kendilerine Unicode tarafıdan 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 özellikleri taşımaktadır:

  • Her karakterin birinci kod biriminin başında o karakteri kodlayan toplam kod birimi sayısı kadar hane 1 ve bu hanelerden sonraki ilk hane 0'dır.
  • Aynı karakteri simgeleyen sonraki tüm baytların başındaki ilk iki hane 10'dı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
Aşağıdaki kalıplar UTF-8 standardının parçası değildir. İlk taslağında mevcut olmasına karşın daha sonra Unicode kod noktalarının üst sınırı U+1FFFFF olarak belirlendiği için aşağıdaki kalıplara gerek kalmamıştır.
26 U+200000 U+3FFFFFF 5 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
31 U+4000000 U+7FFFFFFF 6 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

Buna göre ş harfinin UTF-8 ile nasıl kodlanacağını inceleyelim:

  1. ş harfinin Unicode kod noktası U+015F'tir.
  2. Kod noktası U+0800 ve U+FFFF aralığında olduğu için tabloya göre en az iki baytlık kalıbın içine sığabileceği anlaşılmaktadır.
  3. On altı tabanındaki015F sayısı iki tabanında 001 0101 1111 şeklinde gösterilmektedir. Sağdaki iki adet sıfır tablodaki kalıpta 11 bitlik boş yerin tamamını kaplamak için eklenmiştir.
  4. Kodlanmış karakterimiz iki kod biriminden oluşacağı için ilk kod birimi iki adet 1 ve devamında bir adet 0 ile başlamaktadır. (110xxxxx)
  5. Kalan beş hane kod noktamızın ilk beş hanesiyle doldurulur (11000101).
  6. Mavi renkli kısım yerleştirildiği için kod noktamızdan geriye yeşil renkle gösterilen 6 hane kalmıştır (001 0101 1111).
  7. İkinci kod birimimiz kural gereği 10 ile başlamaktadır ve kalan 6 hanesi boştur. (10xxxxxx)
  8. Kalan 6 haneyi kod noktamızda kalan bitlerle doldurursak ikinci kod birimimiz (baytımız) de tamamlanmış olur (10011111).
  9. Kodlama tamamlanmıştır. U+015F kod noktalı "ş" karakteri UTF-8 kodlamasında 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.


İlgili Bağlantılar[değiştir | kaynağı değiştir]