Unicode

Unicode logosu.

Unicode (Evrensel Kod) Unicode Consortium organizasyonu tarafından geliştirilen ve her karaktere bir sayı değeri karşılığı atayan bir endüstri standardıdır. Sistemin amacı farklı karakter kodlama sistemlerinin birbiriyle tutarlı çalışmasını ve dünyadaki tüm yazım sistemlerinden metinlerin bilgisayar ortamında tek bir standart altında temsil edilebilmesini sağlamaktır. Evrensel Karakter Kümesi (UCS) olarak bilinen ISO/IEC 10646 standardı ise, her iki organizasyonun işbirliği ile aynı sayısal karşılıkları taşımaktadır. Unicode, son sürümü itibarıyla 129 farklı modern ve tarihi yazım sistemine ait 120.000'den fazla karakteri ve emoji gibi çeşitli sembol kümelerini kapsamaktadır.

Standardın içinde karakterler ve karakterlere atanmış sayı değerlerinin tablolaştırılmış hali, bu sayılarının kodlanmasıyla ilgili kurum tarafından önerilen standart kodlama sistemleri ve bunların yanı sıra eşdeğer karakterler, karakterin bileşenlerine ayrılış bilgileri, sıralama kuralı, büyük-küçük harf bilgisi, yazılış yönü bilgisi gibi karakterin ekranda doğru gösterilebilmesi için yazılımların ihtiyaç duyduğu ek bilgiler bulunmaktadır.[1] Haziran 2015 tarihi itibarıyla standardın en son sürümü olan Unicode 8.0 ile birlikte 7.716 yeni karakter eklemesi yapılmıştır[2]

Unicode kodlarından oluşan karakter dizilerini (metinleri) bilgisayarda verimli bir biçimde saklayabilmek amacıyla çeşitli karakter kodlamaları geliştirilmiştir. Bunlardan en bilinenleri UTF-8, UTF-16 ve artık kullanımdan kalkmış olan UCS-2'dir.

Unicode öncesi

Harflerin bilgisayar ortamında saklanması ve taşınması ile ilgili geliştirilen ilk sistem ASCII sistemi olmuştur. Bu sistemde Amerikan İngilizcesi alfabesinde bulunan harflerin her birine bir sayı atanmış ve harfler bilgisayar ortamında sayı olarak saklanmıştır. Harflerin kodlanması için 7 bitlik baytlar kullanılmıştır. 7 bit ile yazılabilen en büyük sayı 127'dir ve 128 adet sayı (0 ile 127 arası) temel noktalama işaretleri ve Amerikan İngilizcesi harflerini kodlamak için yeterli olmuştur. Örneğin a harfi ASCII kodlamasında on tabanında 97 sayısıyla eşleştirilmiştir. Harflerin eşleştirildiği bu sayılar daha sonra Unicode tarafından kod noktası olarak adlandırılacaktır.

ASCII kodlaması kullanılmaya başladıktan sonra Latin alfabesi kullanan Avrupa ülkelerinin alfabelerindeki ü, ö veya ç gibi harflerin de kodlanması ihtiyacı ortaya çıktığından Genişletilmiş ASCII denilen yeni bir sistem kullanılmıştır. Bu sistemde harfleri kodlamak için kullanılan yedi bite bir bit daha eklenerek 8 bitlik baytlar kullanılmış ve dolayısıyla kodlanabilecek harf sayısı 27 = 128'den 28 = 256'ya çıkarılmıştır. İlk çıkarılan genişletilmiş ASCII kümesi olan ISO 8859-1 (Latin-1 olarak da bilinir), Latin alfabesi kullanan Batı Avrupa dillerinin büyük çoğunluğunun harflerini karşılamaktadır. Daha sonra farklı dillerin alfabelerinde bulunan o dile özgü karakterler için farklı genişletilmiş ASCII kümeleri çıkarılmıştır. Bu farklı kümelere kod sayfası da denmektedir.

Ancak genişletilmiş ASCII sistemi de meseleyi kökünden çözmeyi başaramamıştır. Genişletilmiş ASCII'nin eksiklikleri şu iki maddeyle özetlenebilir:

Birbirinden farklı ASCII kümelerinde bulunan dillerin karakterlerinin aynı metinde bulunması mümkün değildir. Çünkü 128 ve sonrasındaki sayılar her genişletilmiş ASCII kümesinde farklı karakterlere karşılık gelebilmektedirler. Eğer belgedeki kodlamanın hangi kod sayfasına göre yapıldığı belirtilmemişse Metnin doğru okunması mümkün olmamaktadır. Örneğin İnternet üzerinde kodlama türünün belirtilmemiş olması veya yanlış belirtilmiş olması nedeniyle Türkçe karakterlerden ı, ş karakterlerinin ý, þ olarak görünmesinin nedeni Türkçe için üretilmiş olan Latin-5 kod sayfasında bu karakterlere karşılık gelen sayıların, İnternet tarayıcılarının kodlama türü belirtilmediğinde varsayılan olarak kullandığı Latin-1 kodlamasında İzlanda alfabesinden ý, þ karakterlerine karşılık gelmesi yüzündendir. Dolayısıyla diğer dillerin alfabeleri için bir çözüm olarak öne sürülen genişletilmiş ASCII sistemi de tam çözüm olamamıştır.

Farklı kod sayfaları arasında karışıklığa yol açması bir yana içinde binlerce farklı karakter barındıran Çince veya Japonca gibi dillerin harfleri için fazladan gelen 128 karakterlik kapasitenin de yeterli olması olanaksızdır. Bu yüzden ASCII sistemi yerini Unicode'a bırakmıştır. Ancak yine de yıllardan beri kullanılmış olması nedeniyle bu kodlamayla üretilmiş birçok yazılım, web sayfası bulunmaktadır. Unicode sistemi teşvik edilse de işletim sistemleri eski yazılım ve web sayfaları nedeniyle ASCII kodlamasını da Unicode ile birlikte hala mecburen desteklemektedir.

Ortaya çıkışı

Unicode'un kökeni 1987'ye dek uzanmaktadır. Bu tarihte Xerox çalışanı Joe Becker ve Apple çalışanı Mark Davis evrensel bir karakter kümesi oluşturmanın sağlayacağı faydalar üzerinde çalışma yapmaktaydı.[3]Ağustos 1988 tarihinde, Joe Becker "şimdilik Unicode olarak adlandırılan uluslararası/çokdilli metin karakteri kodlama sistemi" için bir teklif taslağı hazırladı. Unicode ismini eşsiz, tek ve evrensel bir kodlama sistemini çağrıştırması amacıyla seçtiğini belirtmiştir.[4]

Unicode 88 başlıklı belgede Becker 16-bitlik bir karakter modeli taslağı hazırlamıştır:[4]

Unicode, güvenilir ve üzerinde çalışılabilir dünya geneli bir metin kodlaması ihtiyacına cevap verme niyetiyle ortaya çıkmıştır. Unicode kabaca, dünyadaki bütün yaşayan dillerin tüm karakterlerini kapsayabilmesi amacıyla uzunluğu 16 bite çıkarılmış "geniş gövdeli bir ASCII" olarak tanımlanabilir. Mühendisliği düzgünce yapılan bir tasarımla, karakter başına 16 bit bu amaç için fazlasıyla yeterli olacaktır.

Orijinal 16-bitlik tasarım sadece günlük kullanıma dahil olan karakterlerin ve yazı türlerinin kodlanmasına ihtiyaç duyulacağını varsaymasından kaynaklanıyordu:[4]

Unicode eskiden beri gelenleri korumaktansa geleceğe dönük yararlılığı garanti altına almayı yüksek öncelik edinmiştir. Unicode ilk olarak çağdaş metinlerde kullanılan karakterleri (yani 1988 yılında dünyada basılan gazete ve dergilerin kullandığı karakterlerin tümünü) hedeflemektedir ki bu karakterlerin sayısı şüphesiz 214 = 16.384'ü geçmez. Çağdaş kullanım dahilinde olan karakterlerin dışında kalan diğer karakterlerin eskimiş olduğu veya ender kullanıldığı kabul edilebilir. Çoğunlukla kullanışlı karakterleri barındıran Unicode'u bu eski ve nadir karakterlerle kalabalıklaştırmak yerine bu karakterleri özel kullanım kayıtlarına dahil etmek daha iyidir.

1989 yılının başlarında Unicode çalışma grubu Metaphor'dan Ken Whistler ve Mike Kernaghan, Research Libraries Group'tan Karen Smith-Yoshimura ve Joan Aliprand ve Sun Microsystems'tan Glenn Wright da bulunacak şekilde genişletildi. 1990 yılında Microsoft'tan Michel Suignard ve Asmus Freytag ve NeXT'ten Rick McGowan da gruba katıldı. 1990'ın sonlarına doğru mevcut kodlama standartlarındaki karakterlerin eşlenmesi çalışmaları tamamlanmış ve Unicode'un gözden geçirilecek son taslağı hazırlanmıştı.

Unicode Consortium 3 Ocak 1991'de California'da kuruldu. Ekim 1991'de Unicode standardının ilk cildi yayımlandı. Han ideograflarını içeren ikinci cildi de Haziran 1992'de yayımlandı.

1996'da Unicode 2.0'da yedek karakter mekanizması uygulanmaya başladı. Bu sayede Unicode artık 16 bit ile sınırlanmamış oldu. Yedek karakter çiftlerinin kullanılmasıyla Unicode kod alanı bir milyon kod noktasını bulundurarak kadar genişledi. Böylece Unicode, Mısır hiyeroglifleri veya Göktürk alfabesi gibi birçok tarihi yazı sistemlerini ve kodlamasına ihtiyaç duyulmayacağı tahmin edilen, artık kullanılmayan eskimiş karakterleri destekler hale geldi. Unicode tarafından desteklenmesi ilk başta planlanmamış olan karakterler arasında nadiren kullanılan Kanji karakterleri ve Çince karakterler de bulunmaktadır. Bu karakterler artık kullanılmayan kişi veya yer isimlerinin parçası olduklarından nadiren kullanılıyordu ancak orijinal Unicode mimarisinde düşünülenden çok daha önemli karakterlerdir. [5]

Mimari ve terminoloji

Kod noktası düzlemleri ve blokları

Unicode kod alanı 0'dan 16'ya kadar numaralanmış on yedi adet düzleme (plane) ayrılmıştır:

BMP düzleminde bulunan tüm kod noktaları UTF-16 kodlamasında tek kod birimiyle ve UTF-8 kodlamasında da değişken uzunlukta kod birimleriyle (bir, iki veya üç) kodlanabilir. UTF-16 kodlamasında kod birimleri 16-bit (iki bayta karşılık gelir), UTF-8'de 8-bit (bir bayta karşılık gelir) uzunluğundadır. 1'den 16'ya kadar olan düzlemlerdeki kod noktaları (tamamlayıcı düzlemler, supplementary plane) UTF-8 kodlamasında dört kod birimi ile ve UTF-16'da yedek çiftler veya yer tutucu çiftler (surrogate pairs) denilen bir sistem ile iki kod birimi halinde kodlanırlar.

Her düzlem, blok adı verilen bölümlere ayrılmıştır ve her blokta o blokla ilgili karakterler bulunur. Blokların kapsadığı kod noktalarının sayısı (yani blokların büyüklüğü) değişken olmakla birlikte bu sayı her zaman 16'nın ve genelde de 128'in katıdır. Aynı yazı türünde bulunan karakterler farklı bloklara dağılmış olabilir.

Karakterin Genel Kategorisi

Her kod noktasının Genel Kategori adlı bir niteliği bulunmaktadır. Temel kategoriler şunlardır: Harf (Letter), İm (Mark), Sayı (Number), Noktalama (Punctuation), Sembol (Symbol), Ayırıcı (Seperator) ve Diğer (Other). Bu kategorilerin alt bölümleri de bulunmaktadır. Genel Kategori niteliği her zaman kullanışlı değildir; çünkü eski kodlama sistemleri tek kod noktasına birden fazla özellik yüklemiştir. Örneğin U+000A <control-000A> karakteri ASCII sisteminde hem kontrol hem de düzen ayırıcısı karakteri olarak kullanılmıştır, Unicode'da bu karakterin Genel Kategori niteliği "Diğer, Kontrol" olarak tanımlanmıştır. Bir kod noktasının özelliklerinin ve davranışının tam olarak belirlenebilmesi için diğer niteliklerin de dikkate alınması gerekmektedir. Mevcut Genel Kategoriler şunlardır:

Genel Kategori (Unicode Karakter Niteliği)[a 1]
Değer Büyük, küçük kategoriler Temel tür[a 2] Atanmış karakter[a 2] Sabit[a 3] Yorumlar
Harf (Letter)
Lu Harf, büyük harf Çizgesel (Graphic) Var
Ll Harf, küçük harf Çizgesel Var
Lt Harf, ilk harf büyük Çizgesel Var Büyük ve küçük harflerden oluşan bağlı harfler (Dž, Lj, Nj, ve Dz gibi)
Lm Harf, niteleyici Çizgesel Var
Lo Harf, diğer Çizgesel Var
İm (Mark)
Mn İm, boşluksuz Çizgesel Var
Mc İm, boşluklu birleşen Çizgesel Var
Me İm, çevreleyen Çizgesel Var
Sayı (Number)
Nd Sayı, onluk rakam Çizgesel Var Sadece bu kategorideki karakterler Sayısal Tür = De niteliğine sahiptir[a 3]
Nl Sayı, harf Çizgesel Var Harflerden veya harf benzeri karakterlerden oluşan sayılar (mesela Roma rakamları)
No Sayı, diğer Çizgesel Var Basit kesirler, üst simge veya alt simge şeklinde yazılan rakamlar
Noktalama (Punctuation)
Pc Noktalama, bağlayıcı Çizgesel Var "_" alt çizgi karakterini içerir
Pd Noktalama, tire Çizgesel Var Bir çok tire imi karakterlerini içerir
Ps Noktalama, açan Çizgesel Var Açan ayraç karakterleri
Pe Noktalama, kapatan Çizgesel Var Kapatan ayraç karakterleri
Pi Noktalama, açan tırnak Çizgesel Var Açan tırnak işareti. ASCII "nötr" tırnak işaretini içermez. Kullanıma bağlı olarak Ps veya Pe olarak davranır
Pf Noktalama, kapatan tırnak Çizgesel Var Kapatan tırnak işareti. Kullanıma bağlı olarak Ps veya Pe olarak davranır
Po Noktalama, diğer Çizgesel Var
Sembol (Symbol)
Sm Sembol, matematik Çizgesel Var
Sc Sembol, para birimi Çizgesel Var
Sk Sembol, niteleyici Çizgesel Var
So Sembol, diğer Çizgesel Var
Ayırıcı (Seperator)
Zs Ayırıcı, boşluk Çizgesel Var Boşluk karakterini, SEKME (TAB), satır başı ve satır atlatma gibi Cc karakterlerini içerir
Zl Ayırıcı, satır Biçimlendirme Var Sadece U+2028 line separator (satır ayırıcısı) (LSEP)
Zp Ayırıcı, paragraf Biçimlendirme Var SadeceU+2029 paragraph separator (paragraf ayırıcısı) (PSEP)
Diğer (Other)
Cc Diğer, kontrol Kontrol Var Sabit 65 Adsız[a 4], <control>
Cf Diğer, biçimlendirme Biçimlendirme Var Satır sonu çizgisini, çift yönlü metinleri desteklemek için gereken kontrol karakterlerini ve dil etiketi karakterlerini içerir
Cs Diğer, yedek Yedek Yok (soyut) Sabit 2048 Adsız[a 4], <surrogate>
Co Diğer, özel kullanım Özel kullanım Yok (soyut) Sabit BMP'de 6.400, 1516. Düzlemlerde 131.068 tane Adsız[a 4], <private-use>
Cn Diğer, atanmamış Yok Yok Sabit 66 Adsız[a 4], <noncharacter>
Ayrılmış (Reserved) Yok Sabit değil Adsız[a 4], <reserved>
  1. Unicode 6.0, Bölüm 4, tablo 4-9
  2. 1 2 Unicode 6.0, Bölüm 2, tablo 2-3: Types of code points
  3. 1 2 Stability policy: Nitelik Değeri Kararlılığı ve tablo. Kararlılık politikası: Bazı gc grupları asla değişmeyecektir. gc=Nd, Numeric Type=De (onluk) ile birebir uyuşacaktır.
  4. 1 2 3 4 5 Unicode 6.0, Bölüm 4, tablo 4-12 Name=""; Kod Noktası Etiketi adsız bir kod noktasını tanımlamak için kullanılabilir. <control-hhhh>, <control-0088> gibi. Ad bölümü belgeleme sayfalarında kontrol kodunun adı yerine kendisini koymayı önlemek amacıyla boş bırakılır. Unicode <noncharacter> etiketi yerine <not a character> etiketini de kullanmaktadır.

U+D800..U+DBFF aralığında bulunan 1.024 kod noktası üst yedek kod noktaları olarak ve U+DC00..U+DFFF aralığında 1.024 kod noktası da alt yedek kod noktaları olarak bilinir. Üst yedek kod noktası (veya öndeki kod noktası) ve sonrasında gelen alt kod noktasının (veya arkadaki kod noktası) oluşturduğu çifte yedek çifti denir bu yedek çiftleri UTF-16 kodlaması tarafından BMP'nin dışında kalan kod noktalarını kodlamak için kullanılır. UTF-16 kodlaması kod noktalarını iki bayttan oluşan birimler halinde kodlamaktadır, iki bayt ile kodlanabilecek en büyük sayı FFFF16 (6553510) olduğundan U+FFFF'nin sonrasındaki kod noktalarını ifade etmek için U+D800'den U+DFFF'ye kadar olan kod noktaları Unicode tarafından yedek kod noktaları olarak kullanılmak üzere ayrılmıştır. Bu kod noktaları çiftler halinde kullanılarak BMP dışında kalan 1.048.560 karakteri UTF-16 ile kodlamaya fazlasıyla yetmektedir (1.024 * 1.024 = 1.048.576 adet yedek çifti kombinasyonu vardır). Üst ve alt yedek kod noktaları tek başlarına anlamsız ve geçersizdir. Çiftler halinde kullanıldıkları zaman bir karakteri temsil ederler. Dolayısıyla, yedek çifti olarak kullanılmak üzere ayrılmış olan U+D800..U+DFFF aralığındaki kod noktaları U+10000..U+10FFFF aralığındaki kod noktalarının yerini tutmak amacıyla kullanıldığından, karakter olarak kullanılabilecek kod noktaları yedek kod noktaları dışında kalan kod noktalarıdır (U+0000..U+D7FF ve U+E000..U+10FFFF aralığında kalan 1.112.064 kod noktası). Karakter olarak kullanılabilecek kod noktalarına aynı zamanda karakterin skaler değeri de denmektedir. Örneğin UTF-16'da yedek çiftleri kullanılarak (D803 DC00)16 olarak kodlanan U+10C00 𐰀 old turkic letter orkhon a (göktürk alfabesinden a harfi) karakterinin skaler değeri U+10C00'dır denir. Çünkü (D803 DC00)16 yedek çifti 10C0016 sayısını temsil eder.

Unicode bazı kod noktalarına ne şimdi ne de gelecekte herhangi bir karakter atamayacağını duyurmuştur. Karakter dışı kod noktaları Unicode şartnamesinde noncharacter olarak adlandırılmaktadır. Karakter dışı kod noktaları yazılımların iç yapısında herhangi bir amaçla kullanılabilir. Toplamda 66 adet karakter dışı kod noktası bulunmaktadır. U+FDD0..U+FDEF aralığındaki kod noktaları ve her düzlemin son iki kod noktası (yani U+FFFE, U+FFFF, U+1FFFE, U+1FFFF, ... U+10FFFE, U+10FFFF). Karakter dışı kod noktaları sabittir, ileride yeni karakter dışı kod noktası tanımlanmayacaktır.[8]

Ayırtılmış (reserved) kod noktaları da ileride kodlama karakteri olarak kullanılacak olan ama henüz Unicode tarafından kendilerine karakter atanmamış kod noktalarıdır.

Özel kullanım kod noktaları da karakter olarak kullanılabileceği belirtilen ancak hangi karakteri temsilen kullanılacakları Unicode tarafından belirtilmeyip kullanıcıya bırakılmış olan karakterlerdir[9]. Yani bu karakterler yazılı bilgi alışverişi esnasında taraflar arasında önceden yapılmış bir anlaşamaya göre yorumlanabilecek karakterlerdir. Unicode kod alanında üç adet özel kullanım bölgesi vardır:

Çizgesel karakterler (graphic characters), Unicode tarafından tanımlanan, belirli bir anlamsal değeri olan ve görünür bir glif şekline sahip veya görünür bir boşluğu temsil eden karakterlerdir. Unicode 7.0 itibarıyla 112.804 çizgesel karakter vardır.

Biçimlendirme karakterleri ise görünür bir şekilleri olmayan ancak komşu karakterlerin görünüşünü veya davranışını etkileyen karakterlerdir. Örneğin U+200C zero width non-joiner (genişliksiz bağlantı koparıcı) karakteri ve U+200D zero width joiner (genişliksiz bağlayıcı) karakteri bitişebilen karakterlerin bitişme durumunu belirlemek için kullanılabilir. Unicode 7.0'da 152 biçimlendirme karakteri bulunmaktadır. Başka bir örnek vermek gerekirse metin dosyalarında bilgisayarlarda Enter tuşuna basarak yapılan alt satıra geçme işlemi sırasında metne U+000A <control-000A> (satır atlatma) ve U+000D <control-000D> (satır başına getirme) karakterleri işlenir, bu karakterler metin üzerinde görünür bir yer kaplamadığı halde kendilerinden sonra gelen karakterlerin alt satırda görüntülenmesini sağladıkları için kontrol işlevi görür ve çizgesel karakter sınıfına girmez.

Altmış altı kod noktası (U+0000..U+001F ve U+007F.. U+009F aralıkları) kontrol kodları olarak ayrılmıştır ve ISO/IEC 6429 standardıyla belirlenen C0 ve C1 kontrol kodlarına karşılık gelir. Unicode'la uyumlu kodlamalarda bu kontrol karakterlerinden U+0009 <control-0009> (sekme), U+000A <control-000A> (satır atlatma) ve U+000D <control-000D> (satır başına getirme) karakterleri sıklıkla kullanılır.

Çizgesel karakterler, biçimlendirme karakterleri ve kontrol kodu karakterleri hep beraber atanmış karakterler olarak bilinir.

Soyut karakterler

Soyut karakter, metinsel bir verinin düzenlenmesi, denetlenmesi veya temsil edilmesi için kullanılan bilgi birimi olarak tanımlanmıştır. Soyut karakterin bir kod noktasıyla eşleştirilmiş haline kodlu karakter denir ve kodlu karakterler genelde kısaca karakter olarak anılır. Soyut karakterler, karakterlerin temsil ettikleri bilginin soyut, yani şekil almamış halini temsil eder. Unicode standardında tek bir kod noktasıyla ifade edilebilen bir soyut karakter aynı zamanda birden fazla kod noktasının yan yana kullanılmasıyla da alternatif olarak temsil edilebilir.[10] Örneğin â harfi, Unicode tanımı U+00E2 â latin small letter a with circumflex (şapkalı küçük latin a harfi) kod noktasıyla ifade edilebileceği gibi U+0061 a latin small letter a (küçük latin a harfi) ve U+0302 ̂ combining circumflex accent (birleşen şapka işareti) kod noktalarının yan yana kullanılmasıyla da ifade edilebilir. İki farklı şekilde de aynı görüntü ortaya çıkacaktır: U+00E2 â ve U+0061 U+0302 â. Bu karakterler kodlamaları itibarıyla farklı olmalarına rağmen aynı soyut karakteri temsil etmektedir. Birisi tek bir kod noktasından oluşurken diğeri harfin parçalarına karşılık gelen kod noktalarının birleştirilmesiyle ifade edilir. Ancak bazı soyut karakterlerin Unicode standardında tek kod noktasıyla karşılığı yoktur. Bu yüzden bu soyut karakterler birden fazla kod noktasının art arda kullanılmasıyla ifade edilebilirler. Unicode yalnızca iki kod noktasının kombinasyonuyla ifade edilebilen soyut karakterlerin bir listesini sitesinde barındırmaktadır.[11]

Ayrıca, diğer standartlarla uyumluluk sağlamak için bazen aynı soyut karakter birden çok tekil kodlanmış karaktere karşılık gelebilir. Bu durum aynı karakterin birden fazla kod noktasının birleşimi şeklinde gösterilmesinden farklıdır. Mesela Å karakteri Unicode standardında U+00C5 Å latin capital letter a with ring above (üzerinde halka olan büyük latin a harfi) kod noktasıyla temsil edilmektedir. Ancak aynı soyut karakteri temsil eden U+212B angstrom sign (angstrom işareti) adlı bir kod noktası da bulunmaktadır.

Tüm çizgesel karakterler, biçimlendirme karakterleri ve özel kullanım karakterlerinin eşsiz ve değişmez bir tanımlayıcı adı vardır. İsimlerin değişmezliği Unicode sürüm 2.0'dan itibaren İsim Kararlılığı Politikası ile garanti altına alınmıştır [8]. Tanımlayıcı adın ciddi derecede sorunlu ve yanıltıcı olduğu veya önemli yazım hataları içerdiği durumlarda resmi bir ikincil ad tanımlanabilir ve uygulamaların resmi karakter adı yerine resmi ikincil adı kullanmaları tavsiye edilir. Örneğin Yi yazısına ait karakterlerden yanlış adlandırılan U+A015 yi syllable wu (yi wu hecesi) karakterine daha sonra yi syllable iteration mark (yi hece yineleme işareti) şeklinde ikincil bir ad tanımlanmıştır. U+FE18 presentation form for vertical right white lenticular brakcet (yanlış yazılmış) karakteri daha sonra ikincil ad olarak presentation form for vertical right white lenticular bracket adını almıştır.[12]

Karakter kodlamaları

Eskiden karakter kodlaması kavramı hem her karaktere birer sayı atama hem de bu sayıları doğrudan iki tabanına dönüştürüp bilgisayarda kullanılabilir hale getirme işlemine verilen isimdi. Bu yüzden Unicode'dan önce kullanılan ASCII ve tüm genişletilmiş ASCII sistemleri birer karakter kodlamasıdır. Unicode'dan sonra ise karakter kodlaması kavramı değişmiştir. Unicode, karakterlere sayı atanmasıyla bu sayıların iki tabanına dönüştürülmesi işlemini birbirinden ayırmıştır. Çünkü Unicode ile beraber karakterlere atanan sayıları (kod noktalarını) doğrudan iki tabanına dönüştürmektense farklı yöntemler kullanarak dönüştürme ihtiyacı ortaya çıkmıştır. Dolayısıyla Unicode'dan sonra karakter kodlaması kavramı kod noktalarını iki tabanında temsil etme yöntemini karşılar olmuştur.

Tanımda meydana gelen bu değişikliğin nedeni, Unicode'un genişletilmiş ASCII kümelerinin karakterlere atamak için kullandığı [0, 255] olan sayı aralığını [0, 1.114.111]'e çıkarmasında yatmaktadır. Unicode'dan önceki sistemlerde karakterlere atanan sayılar 255'i aşmadığı için, bu sayılar doğrudan iki tabanına çevrilip karakterleri temsil etmek için kullanılabiliyordu. Örneğin ASCII sistemlerinde a harfi 9710 sayısıyla eşleştirilmişti ve herhangi bir metin belgesinde a harfi kodlanacağı zaman 9710 iki tabanına dönüştürülüp 11000012 şeklinde 8-bitlik bir bayt olarak depolanıyordu. Sayılar 255'i aşmadığı için her karakter 1 bayta sığmaktaydı. Ancak Unicode sisteminde 255'ten büyük sayılar iki tabanında 8 biti aşmaktadır ve eğer 1.114.111 sayının hepsi eşit uzunlukta olacak şekilde doğrudan iki tabanına dönüştürülüp kullanılmak istenirse her karakterin 32 bit uzunluğunda olması, iki tabanına dönüştürüldüğünde 32 bitten kısa olan sayıların da başına sıfır eklenerek 32 bite tamamlanması gerekir. Çünkü her karakterin uzunluğu sabit olmazsa kodlamada bir karakterin nerede bitip diğerinin nerede başladığı anlaşılamaz. Bu durum genişletilmiş ASCII'ye göre kodlanmış bir metne göre Unicode ile kodlanmış bir metnin dört kat kadar fazla yer kaplamasına neden olacaktır.

Her karakterin eşit uzunlukta bitlerle temsil edilmesi zorunluluğundan kurtulmak istenirse karakterlerin kod noktalarını iki tabanına dönüştürürken araya karakterin başlangıcını veya sonunu belli edecek işaretler eklenerek kodlama yapılması gerekecektir. Bu işlem için geliştirilen birkaç farklı kodlama sistemi bulunmaktadır. Bunlara örnek olarak UTF-8, UTF-16 ve UTF-32 gösterilebilir. Bunların her biri, karakterlerin kod noktalarını (yani Unicode tarafından kendilerine atanan sayıları) bilgisayar ortamında saklamak ve üzerinde işlem yapmak amacıyla iki tabanına dönüştürürken farklı yöntemler kullanırlar. Her birinin farklı avantajları ve dezavantajları mevcuttur. Günümüzde en yaygın kullanılan kodlama UTF-8 kodlamasıdır.

Dış bağlantılar

Standardlar

Ayrıca bakınız

Kaynaklar

  1. "The Unicode Standard: A Technical Introduction (Unicode Standardı: Teknik Tanıtım)" (İngilizce). 31 Aralık 2015 tarihinde kaynağından arşivlendi. http://web.archive.org/web/20151231104407/http://www.unicode.org:80/standard/principles.html. Erişim tarihi: 2010-03-16.
  2. "Unicode 8.0.0, Summary" (İngilizce). 28 Haziran 2016 tarihinde kaynağından arşivlendi. http://web.archive.org/web/20160628205940/http://unicode.org/versions/Unicode8.0.0/. Erişim tarihi: 2015-07-06.
  3. "Özet Hikaye (İngilizce)" (İngilizce). 21 Nisan 2016 tarihinde kaynağından arşivlendi. http://web.archive.org/web/20160421185826/http://www.unicode.org/history/summary.html. Erişim tarihi: 2010-03-15.
  4. 1 2 3 Becker (August 29, 1988). "Unicode 88" (İngilizce). 28 Mayıs 2016 tarihinde kaynağından arşivlendi. http://web.archive.org/web/20160528115218/http://www.unicode.org/history/unicode88.pdf.
  5. Searle. "Unicode Revisited". 8 Nisan 2016 tarihinde kaynağından arşivlendi. http://web.archive.org/web/20160408231438/http://tronweb.super-nova.co.jp/unicoderevisited.html.
  6. "Unicode terimleri sözlüğü" (İngilizce). 26 Aralık 2015 tarihinde kaynağından arşivlendi. http://web.archive.org/web/20151226015034/http://www.unicode.org:80/glossary/. Erişim tarihi: 2010-03-16.
  7. "Unicode Standardı, Sürüm 6.0, s. 62, Karakter Kodlama Biçimleri" (İngilizce). http://www.unicode.org/versions/Unicode6.0.0/ch03.pdf#G7404. Erişim tarihi: 2012-06-04.
  8. 1 2 "Unicode Karakter Kodlaması Kararlılık Politikası" (İngilizce). 10 Nisan 2016 tarihinde kaynağından arşivlendi. http://web.archive.org/web/20160410010920/http://unicode.org/policies/stability_policy.html. Erişim tarihi: 2010-03-16.
  9. "Nitelikler" (İngilizce). http://www.unicode.org/versions/Unicode5.0.0/ch03.pdf#G43463.
  10. "Unicode Karakter Kodlama Modeli" (İngilizce). 15 Aralık 2015 tarihinde kaynağından arşivlendi. http://web.archive.org/web/20151215141501/http://www.unicode.org:80/reports/tr17/. Erişim tarihi: 2010-03-16.
  11. "Unicode Adlandırılmış Dizilimler" (İngilizce). 27 Kasım 2015 tarihinde kaynağından arşivlendi. http://web.archive.org/web/20151127064536/http://www.unicode.org:80/Public/UNIDATA/NamedSequences.txt. Erişim tarihi: 2010-03-16.
  12. "Unicodeİkincil Adlar" (İngilizce). 28 Mayıs 2016 tarihinde kaynağından arşivlendi. http://web.archive.org/web/20160528054711/http://www.unicode.org/Public/UNIDATA/NameAliases.txt. Erişim tarihi: 2010-03-16.
This article is issued from Vikipedi - version of the 12/26/2016. The text is available under the Creative Commons Attribution/Share Alike but additional terms may apply for the media files.