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. 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
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:
- 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 | ||
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 . standardı ile UTF-8'in üst sınırı U+10FFFF olarak belirlenmiştir. Bunun nedeni diğer bir karakter kodlama biçimi olan '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 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:
- Geriye doğru uyumluluk: 0 ile 127 arasındaki ASCII değerleri için tek baytlık değerler kullanılmakta ve bu değerler başka karakterlerin kodlanması esnasında ortaya çıkmamaktadır. En yüksek basamaklı bit (8. bit) de bu karakterler için
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. - Çok baytlı ve tek baytlı karakterler arasındaki açık ayrım: 127'den daha büyük kod noktaları çok baytlı dizilerle gösterilir ve bu dizilerde bir adet başlatıcı bayt ve bir veya daha fazla devam baytı bulunmaktadır. Başlatıcı bayt, dizideki toplam bayt sayısı kadar
1
ve daha sonra bir adet0
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ğrudan0
ile başlamaktadır. - Kendini eş zamanlama: Başlatıcı bayt, devam baytı ve tek baytın değerleri birbiriyle asla aynı olamaz. Çünkü hepsi yukarıdaki tabloda görüldüğü gibi farklı şekillerde başlamaktadır. Bu özellik UTF-8'in kendini eş zamanlayabilen bir sistem olmasını sağlar. Yani UTF-8 ile kodlanmış metinleri işleyen bir yazılım, metin içinde rastgele seçtiği bir baytın karakter başlatan bayt olup olmadığını belirleyebilir ve karakterlerin başlangıç ve bitişlerini kolayca bulabilir.
0xxxxxxx
,110xxxxx
,1110xxxx
ve11110xxx
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. - Kodlanmış bayt dizilerinin uzunluklarının açıkça belirtiliyor olması: Başlatıcı baytın başındaki
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. - Değişken kod uzunluğu: Kodlanmış karakterlerin kapladığı yeri mümkün olduğunca azaltabilmek için değişken uzunluklu baytlarla kodlama yapılması büyük kolaylıklar sağlamaktadır. Örneğin sabit uzunluklu kodlamasında kodlanmış karakter uzunluğu iki bayttır. U+0000 ve U+00FF aralığındaki kod noktaları tek bayta sığabilmelerine karşın başlarına bir adet boş bayt konularak ikiye tamamlanırlar. Bu yüzden de sırf temel Latin harfleriyle yazılmış bir metin UTF-16 kodlamasıyla UTF-8'e göre iki katı yer kaplamaktadır. Değişken uzunluklu kodlama ile bu sorun çözülmüş ve her kod noktası ihtiyaç duyulduğu kadar baytla kodlanabilir hale gelmiştir.
İ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 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.
Örnekler
"ş" harfinin UTF-8 ile kodlanması
- ş harfinin Unicode kod noktası U+015F'tir.
- Kod noktası U+0080 ve U+07FF 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.
- On altı tabanındaki
015F
sayısı iki tabanında001 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. - 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
) - Kalan beş hane kod noktamızın ilk beş hanesiyle doldurulur (
11000101
). - 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
). - İkinci kod birimimiz kural gereği 10 ile başlamaktadır ve kalan 6 hanesi boştur. (
10xxxxxx
) - Kalan 6 haneyi kod noktamızda kalan bitlerle doldurursak ikinci kod birimimiz (baytımız) de tamamlanmış olur (
10011111
). - 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ülerekC5 9F
olarak gösterilir.
İlgili Bağlantılar
- UTF-8'i anlatan ilk makale
- http://www.utf-8.com/ 13 Kasım 2004 tarihinde Wayback Machine sitesinde . UTF-8
- Türkçe karakter problemleri ve UTF-8
- http://www.joomlasite.eu/component/content/article/10-joomla-hakknda/87-joomla-ve-utf-8/[] Joomla ve UTF-8
Kaynakça
- ^ Allen, Julie D.; Anderson, Deborah; Becker, Joe; Cook, Richard, (Ed.) (2012). "The Unicode Standard, Version 6.1". Mountain View, California: Unicode Consortium.
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.
wikipedia, wiki, viki, vikipedia, oku, kitap, kütüphane, kütübhane, ara, ara bul, bul, herşey, ne arasanız burada,hikayeler, makale, kitaplar, öğren, wiki, bilgi, tarih, yukle, izle, telefon için, turk, türk, türkçe, turkce, nasıl yapılır, ne demek, nasıl, yapmak, yapılır, indir, ücretsiz, ücretsiz indir, bedava, bedava indir, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, resim, müzik, şarkı, film, film, oyun, oyunlar, mobil, cep telefonu, telefon, android, ios, apple, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, pc, web, computer, bilgisayar
UTF 8 8 bitlik bir Unicode donusum bicimidir Ing Unicode Transformation Format in kisaltmasi Unicode karakterlerini degisken sayida 8 bitten olusan bayt kod birimi gruplariyla kodlamakta kullanilir ve Ken Thompson tarafindan gelistirilmistir UTF 8 kodlamasi Unicode karakterlerini 1 6 bayt uzunlugunda diziler olarak kodlar ASCII kodlamasi icinde 0 127 arasinda kalan karakterler Unicode standardinda ayni kod noktalariyla ifade edildiginden aynen kendi kodlari ile kullanilir digerleri ise bayt dizileri haline gelir OzellikleriKarakterlerin her birinin kendilerine Unicode tarafindan atanan bir kod noktasi vardir Her kod noktasi 0 ile 1 114 111 arasinda bir sayidir Bu kod noktalari iki tabanina donusturulurken dogrudan taban donusumu yapilmak yerine cesitli yontemler kullanilmaktadir Bu yontemlerin her biri ayri birer karakter kodlama bicimi olarak adlandirilir UTF 8 kodlama bicimi kod noktalarini degisken sayida kod birimlerinden olusacak sekilde iki tabanina donusturmeye olanak vermektedir Kod birimlerinin her biri 8 bit uzunlugundadir Dolayisiyla UTF 8 ile kodlanan bir metinde her karakterin uzunlugu 8 in katidir Kodlama yapilirken kodlanmis metni isleyecek bir bilgisayar yaziliminin karakterlerin baslangic ve bitis noktalarini bilebilmesine olanak saglamak icin kod birimlerinin icine isaretci bazi bitlerin yerlestirilmesi gerekmektedir UTF 8 kodlama bicimi su kurallara gore calismaktadir Her karakterin birinci kod biriminin basinda o karakteri kodlayan toplam kod birimi sayisi kadar hane 1 ve bu hanelerden sonraki ilk hane 0 dir Ayni karakteri simgeleyen sonraki tum baytlarin basindaki ilk iki hane 10 dir UTF 8 in tasarimi ilk olarak Dave Prosser in onerdigi ve daha sonra Ken Thompson in uzerinde degisiklikler yaptigi asagidaki tabloda gorulebilir Bu tablodaki kaliplar kullanilarak kod noktasinin bit sayisina uygun olan kalip secilip x ile isaretli kisimlara saga dayali olacak sekilde bitler yerlestirilmek ve geriye kalan kisimlar 0 ile doldurulmak suretiyle karakter kodlanmis olur Kod noktasinin bit sayisi Ilk kod noktasi Son kod noktasi Kod birimi bayt sayisi 1 Bayt 2 Bayt 3 Bayt 4 Bayt 5 Bayt 6 Bayt 7 U 0000 U 007F 1 0xxxxxxx11 U 0080 U 07FF 2 110xxxxx 10xxxxxx16 U 0800 U FFFF 3 1110xxxx 10xxxxxx 10xxxxxx21 U 10000 U 1FFFFF 4 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx26 U 200000 U 3FFFFFF 5 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx31 U 4000000 U 7FFFFFFF 6 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx Orijinal sartname 31 bite kadar olan tum sayilari kapsamaktadir Teorik olarak 31 bite kadar uzunluktaki sayilari UTF 8 ile kodlamak mumkun olsa bile Kasim 2003 te cikan RFC 3629 11 Agustos 2015 tarihinde Wayback Machine sitesinde standardi ile UTF 8 in ust siniri U 10FFFF olarak belirlenmistir Bunun nedeni diger bir karakter kodlama bicimi olan nin kodlayabilecegi en buyuk kod noktasinin U 10FFFF olmasidir Kodlama standartlari arasinda uyumluluk saglanmasi ve hepsinin uzak gelecekte de sorunsuz olarak kullanilmaya devam edebilmesi icin UTF 8 in ust siniri da uygulamada U 10FFFF olarak belirlenmistir Ayrica Unicode ve yine UTF 16 ile uyumu korumak icin karakterlere U 10FFFF den daha buyuk kod noktasi atamamaya karar vermislerdir Bu yuzden yukaridaki tabloda 5 ve 6 bayttan olusan kaliplarin tamami ve 4 bayttan olusan kaliplarin da yariya yakini gunumuzde gecersizdir UTF 8 kodlamasinin goze carpan baslica ozellikleri asagidaki gibi listelenebilir Geriye dogru uyumluluk 0 ile 127 arasindaki ASCII degerleri icin tek baytlik degerler kullanilmakta ve bu degerler baska karakterlerin kodlanmasi esnasinda ortaya cikmamaktadir En yuksek basamakli bit 8 bit de bu karakterler icin 0dir Dolayisiyla 7 bitlik ve 8 bitlik ASCII ile kodlanmis metinler UTF 8 ayristiricilari tarafindan sorunsuzca islenebilir Cok baytli ve tek baytli karakterler arasindaki acik ayrim 127 den daha buyuk kod noktalari cok baytli dizilerle gosterilir ve bu dizilerde bir adet baslatici bayt ve bir veya daha fazla devam bayti bulunmaktadir Baslatici bayt dizideki toplam bayt sayisi kadar 1 ve daha sonra bir adet 0 ile baslar Devam baytlarinin ise tamami 10 ile baslamaktadir Eger kod noktasi tek baytla kodlaniyorsa bu bayt da dogrudan 0 ile baslamaktadir Kendini es zamanlama Baslatici bayt devam bayti ve tek baytin degerleri birbiriyle asla ayni olamaz Cunku hepsi yukaridaki tabloda goruldugu gibi farkli sekillerde baslamaktadir Bu ozellik UTF 8 in kendini es zamanlayabilen bir sistem olmasini saglar Yani UTF 8 ile kodlanmis metinleri isleyen bir yazilim metin icinde rastgele sectigi bir baytin karakter baslatan bayt olup olmadigini belirleyebilir ve karakterlerin baslangic ve bitislerini kolayca bulabilir 0xxxxxxx 110xxxxx 1110xxxx ve 11110xxx bit kaliplari karakter baslangicini ve bir sonraki gecerli karakterin baslangicinin kac bayt sonra oldugunu acikca isaret etmektedir Kodlanmis bayt dizilerinin uzunluklarinin acikca belirtiliyor olmasi Baslatici baytin basindaki 1lerin sayisi devam eden baytlarin sayisini acikca belli etmektedir Dolayisiyla karakterin toplamda kac bayt tarafindan kodlandigi ve diger karakterin nerede basladigi devam baytlarini tek tek incelemeden anlasilabilmektedir Dolayisiyla metinde karakter arama ve bulma islemleri kolaylasmis olur Degisken kod uzunlugu Kodlanmis karakterlerin kapladigi yeri mumkun oldugunca azaltabilmek icin degisken uzunluklu baytlarla kodlama yapilmasi buyuk kolayliklar saglamaktadir Ornegin sabit uzunluklu kodlamasinda kodlanmis karakter uzunlugu iki bayttir U 0000 ve U 00FF araligindaki kod noktalari tek bayta sigabilmelerine karsin baslarina bir adet bos bayt konularak ikiye tamamlanirlar Bu yuzden de sirf temel Latin harfleriyle yazilmis bir metin UTF 16 kodlamasiyla UTF 8 e gore iki kati yer kaplamaktadir Degisken uzunluklu kodlama ile bu sorun cozulmus ve her kod noktasi ihtiyac duyuldugu kadar baytla kodlanabilir hale gelmistir Ilk 128 karakter US ASCII kumesindeki karakterlerin aynisi tek baytla kodlanir Sonraki 1 920 karakter ise iki baytla kodlanir Bu 1 920 karakter neredeyse tum Latin alfabeleri ve ayrica Yunan Kiril Koptik Ermeni Ibrani Arap Suryani ve Thaana alfabelerini ve eklemlenebilen diyakritik isaretleri kapsamaktadir Yaygin kullanimdaki hemen hemen tum karakterleri bulunduran bir ve iki baytla kodlananlar disindaki tum karakteri icin uc bayt gerekir Cin Japon ve Kore karakterlerinden pek yaygin kullanilmayanlar cesitli tarihi yazi bicimleri matematiksel simgeler ve emojinin bulundugu diger Unicode duzlemlerindeki karakterler de dort bayt ile kodlanir Ornekler s harfinin UTF 8 ile kodlanmasis harfinin Unicode kod noktasi U 015F tir Kod noktasi U 0080 ve U 07FF araliginda oldugu icin tabloya gore en az iki baytlik kalibin icine sigabilecegi anlasilmaktadir On alti tabanindaki015F sayisi iki tabaninda 001 0101 1111 seklinde gosterilmektedir Soldaki iki adet sifir tablodaki kalipta 11 bitlik bos yerin tamamini kaplamak icin eklenmistir Kodlanmis karakterimiz iki kod biriminden olusacagi icin ilk kod birimi iki adet 1 ve devaminda bir adet 0 ile baslamaktadir 110xxxxx Kalan bes hane kod noktamizin ilk bes hanesiyle doldurulur 110 span style color blue 00101 span Mavi renkli kisim yerlestirildigi icin kod noktamizdan geriye yesil renkle gosterilen 6 hane kalmistir span style color black 001 01 span span style color green 01 1111 span Ikinci kod birimimiz kural geregi 10 ile baslamaktadir ve kalan 6 hanesi bostur 10xxxxxx Kalan 6 haneyi kod noktamizda kalan bitlerle doldurursak ikinci kod birimimiz baytimiz de tamamlanmis olur 10 span style color green 011111 span Kodlama tamamlanmistir U 015F kod noktali s karakteri UTF 8 kodlamasinda 110 span style color blue 00101 span 10 span style color green 011111 span seklinde kodlanmaktadir Iki tabanindaki bu uzun bit dizilimi yazimi daha kolay olsun diye siklikla on alti tabanina donusturulerek span style color blue C5 span span style color green 9F span olarak gosterilir Ilgili BaglantilarUTF 8 i anlatan ilk makale http www utf 8 com 13 Kasim 2004 tarihinde Wayback Machine sitesinde UTF 8 Turkce karakter problemleri ve UTF 8 http www joomlasite eu component content article 10 joomla hakknda 87 joomla ve utf 8 olu kirik baglanti Joomla ve UTF 8Kaynakca Allen Julie D Anderson Deborah Becker Joe Cook Richard Ed 2012 The Unicode Standard Version 6 1 Mountain View California Unicode Consortium 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