Character Encodings: ASCII, Unicode & UTF-8 Nedir

Not: Bu içerikte Decimal,hexadecimal , binary gibi dönüşümler vardır. Bilmeyen arkadaşlar buraya tıklayarak öncesinde ufak bir bilgi almaları daha sağlıklı olabilir.

Can Avcı
4 min readFeb 6, 2021

Birçok yazılımcı ve mühendis arkadaşımızın müzdarip olduğu konulardan biride encoding kavramıdır.
Bir noktadan başka bir noktaya bir metin gönderildiği zaman her iki tarafında bu mesajı doğru halde görüntüleyebilmesi gereklidir. Buna encoding denir
Örnek vermek gerekirse: Alice isimli kişi “hello” mesajını bob’a göndermek istediğinde bu metin bilgisayarların anlayacağı şekilde 0 ve 1 bitlerine çevirilir. (Aşağıdaki resimde görüldüğü gibi)

İşte her bir karakterin aslında 0 ve 1 lik sistemde bir karşılığı bulunmaktadır. altta bu alanların karşılıkları verilmiştir

Diyeceksiniz ki bunlar neye göre verilmiştir. işte bu noktada encoding kavramı devreye girer. bunlar belirlenmiş standartlardır. altta encoding tipleri anlatılmıştır.

ASCII

ascii de 8 bit ( 1byte ) üzerinde işlem yapar. fakat 7 bit kullanılır. 8. bit kontrol karakteridir. ( matematiksel operatorlerde + ,- gibi işlemler için kullanılır ).
7 bit olmasından ötürü maksimum 127 (2⁷-1) karakter mevcuttur ve her bir karakterin decimal (ondalık) karşılığı mevcuttur.
‘A’ karakteri decimal karşılığı 65, binaryde ise 01000001 dir.
(01000001=65 binary to decimal olayını ileriki bölümlerde anlatılacaktır).
Full karakter listesi ve karşılıkları : https://ascii-code.com
Yukarıdaki linke baktığımızda hello world yazmak istersek binary karşılığı:

01001000 01100101 01101100 01101100 01101111 = h e l l o

yani alice boba binary gönderdi ve bobta bu binary alıp stringe çevirdi. Sonuçta elinde ascii-code listesi mevcut ve binary to string yaptı ;)

ASCII TARAFINDAKİ PROBLEM NEY?

ascii 127 (7 bit ile işlem yapıyor) karakter kullanmaktadır ve hepside ingilizce karakterlerdir (eğer ingilizseniz no problem :) ). peki ya diğer ülkelerin alfabeleri ne olacak ? yani ufak bir hesaplama ile en az 10 bin -15 bin karakter daha lazım. ve ascii 7 bit ile olacak birşey değil. bu problemle baş etmek için dünyada bir çok insan az önce konuştuğumuz 8. kontrol bitinide işin içine aldılar ve sonuç 255 ( 2⁸-1) karaktere yükseldi . fakat farklı farklı encoding standartları ortaya çıktığı için bir çok sıkıntı ile de yüzleştiler .

✨ Unicode ✨

Unicode dünyadaki tüm karakterleri temsil etmek için dizayn edilmiş evrensel bir platform . bu nedenle hemen hemen 143,859 farklı karakteri barındırmaktadır.
ascii ile arasındaki en büyük fark şudur: asciide her bir karakterin binary karşılığı belli iken yani kaç byte yada bit kullanılacağı, bu standartta ise belli değildir. bunun için utf-8, utf-16 gibi encoding standartları ortaya çıkmıştır.
sadece her bir karakterin hexadecimal kodları mevcuttur.
Tüm liste = https://unicode-table.com/en/

x karakterinin hexa decimal karşılığı = U+00D7 ,
x karakterinin hexa decimal karşılığı = U+0041 ,

ayrıca unicode ascii nin tüm karakterlerini ve karşılıklarınıda içine alır.
“A” karakterini hex karşılığı ASCII de U+0041 olduğu gibi unicode ‘da aynıdır.

1-) UTF-8 (Unicode transformation format)

unicode encoding tiplerinden biridir. utf-8 denmesinin sebebi 8 bit (1 byte) üzerinde işlem yapar (UTF-16 ise 16 bit işlem ) . Karakterler 1,2,3,4 hatta ve hatta 5–6 byte kadar depolanabilir ( bu karakterlerin decimal karşılıklarına göre değişir. 127 üzerindeki karakterler için en az 2 byte gereklidir.)

Şimdi size 1–2–3 4–5–6 byte encoding anlatıcam.

1-byte encoding (UTF-8)

decimal karşılığı 127 ye kadar olan karakterler için(yani ascii) 1 byte yeterlidir. Peki karakterin 1 byte içinde mi tutulduğu yoksa 2–3 byte içinde olduğunu nasıl anlarız. Cevap: baştaki “0” karakterine göre.

01000001=A ,
01100101=E
gördüğünüz gibi “0” ile başlanmaktadır. bunun anlamı şudur şuanda 1 byte yani 8 bit alan bir karakter tutuyor.
2–3–4 byte işlemler ise 0 ile başlamaz…

2-byte encoding (UTF-8)

her zaman ilk byte(8 bit) “110” ile ile başlar ve kendisinden sonraki byte ise “10” ile başlar. toplam da11 bit kullanılabilir .

Örnek olarak : “µ“ karakternin hex kodu U+00B5 (decimal=181 , binary=10110101 ) ve aşağıda anlatılmıştır.

3-byte encoding (UTF-8)

her zaman “1110” ile ile başlar ve kendisinden sonraki 2 adet 8 bit alan ise “10” ile başlar. Aşağıda mevcuttur.

4,5 and 6 byte encoding (UTF-8)

yukarıdaki pattern başlarına “1” ekleyerek 6 byte kadar devam eder

Aşağıda UTF-8 bytelara göre tabloda gösterimi

ÖZET

UTF-8 den ayrı birçok encoding tipi vardır örnek : UTF-16, GB 18030

https://www.rapidtables.com/code/text/unicode-characters.html

--

--

Can Avcı
Can Avcı

Written by Can Avcı

Full Stack Developer (Php,Laravel,Nodejs,React)

No responses yet