Unicode, tüm karakterlerin belirli hexadecimal sayılarla tanımlanması için hazırlanmış bir evrensel kod sistemi dedik. Fakat, bu bilginin yani bir karakteri belirleyen bu sayı değerinin hafızada nasıl tutulacağına değinmedik.
Mahir'i iki byte'lar halide (UTF-16) hafızada tutmak istediğimizde:
00 4D 00 61 00 68 00 69 00 72 şeklinde tutabildiğimiz gibi,
72 00 69 00 68 00 61 00 4D 00 şeklinde tam tersi biçimde de tutabiliriz. Bu durumda, sisteme bu bilginin hangi yönde tutulduğunun da belirtilmesi gerekir.
00 4D 00 61 00 68 00 69 00 72 şeklinde tutabildiğimiz gibi,
72 00 69 00 68 00 61 00 4D 00 şeklinde tam tersi biçimde de tutabiliriz. Bu durumda, sisteme bu bilginin hangi yönde tutulduğunun da belirtilmesi gerekir.
Bu noktada, tüm unicode verilerin başına FE FF (big endian) FF FE (little endian) dizinini ekleyerek kendinden sonra gelecek olan verinin nasıl tutulduğunu belirtme yoluna gidilmiş. Byte Order Mark denen bu dizin sayesinde işlemcilere en düşük byte'ın nerede olduğu belirtiliyor. Bunun nedeni aslında, piyasadaki işlemcilerin en düşük byte olarak kabul ettiği byte'ın birbirinden farklı olması. Intel en düşük byte olarak ilk byte'ı kabul ederken, Motorola işlemcisi, en düşük byte olarak en sonuncuyu kabul etmekte.
Bu yapı, yeterince tatminkar görünse de özellikle ingiliz alfabesini kullanan sistemlerde gereksiz çok fazla 00'lara neden olmaktaydı çünkü ANSI ya da ASCII'de tanımlanabilen karakterler Unicode yapısında 00'la başlayan karakterlerdi ve iki byte'lık bir karakter yapısının ikinci byte'ı sürekli 00 olmaktaydı. Aynı zamanda, bu sistemlerin birbirine dönüştürülmesi de ayrı bir maliyetti. Bu noktada, UTF-8 geliştirildi. UTF-8 encoding'ine göre 0-127 rakamları arasında tanımlı olan karakterler tek byte'la gösterilecekti. 128 ve üzerindeki rakamlarla tanımlı karakterler ise birden fazla byte'la gösterilecekti.
Böylece, Mahir yazımı 4D 61 68 69 72 şeklinde olacaktı. Ki bu yazım, ASCII ve ANSI yapısındaki yazımla aynıydı.
Mevcut HTML'lerimizi incelediğimizde encoding tagı içinde birçok encoding görüyoruz. Bunlardan en yaygın olanlarından bazıları ISO-8859 ile başlayanlardır. ISO-8859'lar, ISO ve IEC tarafından tanımlanmış 8 bitlik karakter encodingleridir. ISO-8859'la başlayan birçok bölüm vardır ve her biri farklı özel karakter setleri içerir. Türkçe için kullandığımız ISO-8859-9 bölümünde mesela, özel İzlanda harfleri türkçe harfleriyle değiştirilmiş. Onun haricinde ISO-8859-1 bölümü ile hemen hemen aynıdır.
Bunu yanında, bize yine tanıdık gelen windows karakter setleri vardır. Bunlar, microsoft tarafından tanımlanmış olan ANSI code page'leridir. Bilinenler 1250 ile 1258 arasında değişir. 1252 yani West European Latin, ISO-8859-1 baz alınarak hazırlanmıştır. Bizim işimize yarayan ise 1254 yani türkçe için hazırlanmış olan code page'tir.
Zamanında bir yazı okumuştum bu konu üzerine. Bu yazı boyunca, o yazıdan, yer yer birebir çeviri yaptım, yer yer esinlendim. Encoding hakkındaki o yazıya buradan erişebilirsiniz. Bu linkte verdiğim yazıyı iki kez okudum ve bunun yanında biraz araştırma yaptım ama gördüm ki bir yere not almadan tüm bu bilgileri unutuyorum. Ben de, eksiğiyle yanlışıyla aklımda kalanları not almak için bu yazıyı yazdım. Daha öğrendikçe yazıyı da geliştirmeyi düşünüyorum. Ama şimdilik aklımda kalanları bunlar.
No comments:
Post a Comment