Unicode And Character Sets
Bu post, Joel Spolsky‘nin blogunda okuduğum Unicode ve karakter setleriyle alakalı yazıyı özetler nitelikte olacak. Cümleler bana ait veya kaynağından çevrilmiş olabilir. Hepsi için tek tek belirtmeyi gereksiz bir ameliye gördüğümden baştan yazmak istedim.
Unix’in icadından sonraki ilk zamanlar, bilgisayarlar ASCII (American Standard Code for Information Interchange) dediğimiz karakter setini kullanıyorlardı. Bu standarta göre o gün için ihtiyaç duyulan ingilizce karakterler (harekesiz olanlar), sayılar ve noktalama işaretleri 32 ila 127 arasındaki değerlerle ifade ediliyordu. Örneğin boşluk (space) karakteri 32, büyük A harfi 65 bit ile ifade ediliyordu etc. Böylece bilgisayarların genellikle 8 bit olduğu o günlerde karakterler 7 bitle ifade ediliyordu arta kalan 1 bit de tabiri caizse fantezi biti diyebileceğimiz bir durumdaydı.
Karakterlerin 32’den başladığını ifade etmiştik, 32’den az sayılar ise kontrol karakterleri olarak kullanılıyordu. Örneğin 7 bilgisayarı bipletiyordu.
Bilgisayarda meramını İngilizce ile anlatanlar için her şey iyiydi. Dünyanın geri kalanına ise bu karakterler tabii ki yeterli gelmedi. (Farklı alfabe kullananların da varlığı düşünülürse…) Herkes gözünü özgürce kullanabileceği 128-255 değerleri arasındaki boşluğa dikti. Bu aralıktaki değerleri ekrana farklı şekillerde bastıran bir çok değişik encoding formatı ortaya çıkmaya başladı. Globalleşmede çağ açıp çağ kapatan internetin yaygın hale gelmesiyle encoding çakışmaları gözle görünür (çoğu zaman görünmez bkz: �) hale gelmeye başladı. Misal verecek olursak, Rusça karakterleri encode eden bir standart kullanılarak yazılmış Rusça bir dokuman, farklı encoding standartı kullanan bir bilgisayarda görüntülenmek istendiğinde karman çorman karakterler ortaya çıkıyordu.
Unicode: Dünyanın bütün karakterleri, birleşin!
Bu karmaşa Unicode’un doğmasına sebep oldu. Dünya üzerindeki tüm karakterler tek bir karakter setinde toplandı ve adına Unicode denildi. Unicode 32-127 arasını aynen aldığı için ASCII’nin de süpersetidir. Dikkat edilmesi gereken şey, Unicode’un bir encoding standartı değil karakter seti olmasıdır. Bir karakterin tekabül ettiği code point‘i tanımlar. Bu code point’i binary’e, binary haldeki bir veriyi code point’e dönüştürmek ise encoding standartlarının işidir. Söylediğimiz gibi Unicode’da her karakter code point denilen bir kavramla ifade edilir. Bu code point’in memory’deki karşılığına dönüştürülmesi (encoding) ve memory’deki bir değerin code point’e dönüştürülmesi (decoding) ayrı bir süreçtir.
Unicode, aynı karakterin farklı stil (italik,kalın) ve fontlardaki (Times New Roman-Halvetica) hallerinin aynı code point’e tekabül edeceği şekilde dizayn edilmiştir. Örneğin A, A ve A Unicode’da aynı code point değerine tekabül etmektedir. (Fakat tabii ki küçük a harfi farklı bir değerdedir.)
Kavramlar
Encoding: Bir veriyi ifade edildiği bir formdan bir başka forma dönüştürmek… Örneğin A karakterini binary formata dönüştürmek. Decoding: Encoding ile encode edilmiş veriyi ters işlem uygulayarak çözmek. Çoğu zaman veriyi anlamlı hale getirmek manasında kullanılır. Örneğin memory’de binary halde duran veriyi F karakterine dönüştürmek. Unicode, ASCII: Karakter setleri. Bir karakterin binary olarak neye tekabül ettiğini belirtirler. UTF-8 (Unicode Transformation Format): Bir Unicode encoding standartıdır. Unicode üzerinde UTF-8’den başka encoding standartları da mevcuttur. (UCS-2,UTF-16,UTF-32 etc.)
Alıntılar
! It does not make sense to have a string without knowing what encoding it uses.
Encodingini bilmediğin bir stringe sahip olmak bir işe yaramaz.
But that meta tag really has to be the very first thing in the <head> section because as soon as the web browser sees this tag it’s going to stop parsing the page and start over after reinterpreting the whole page using the encoding you specified.
<head> içerisindeki ilk şey encoding tipini belirten meta tagı olmalıdır ki browser bu tag’a göre sayfayı doğru yorumlayabilsin.
Kaynaklar
https://www.joelonsoftware.com/2003/10/08/the-absolute-minimum-every-software-developer-absolutely-positively-must-know-about-unicode-and-character-sets-no-excuses/
https://kodedu.com/2017/03/jwt-json-web-tokens-nedir-ne-ise-yarar/
Leave a comment