ASCII ve Unicode: nedir ve ne işe yarar

Bir bilgisayar yalnızca sayıları anlar; bu yüzden ekranda gördüğün her harf bir koddur. ASCII, standart haline gelen ilk kod tablosuydu ve Unicode bugün her dilde yazmak için kullandığımız tablodur. Burada nasıl çalıştıklarını, hangi kodları bilmenin yararlı olduğunu, bazen harflerin yerine neden tuhaf simgelerin çıktığını ve her şeyi tabloda nasıl inceleyeceğini görüyorsun.

Güncelleme:

Karakter kodlaması nedir

Kodlama bir anlaşmadır: “65 sayısı A harfi demektir”. Bir metin yazdığında program bu sayıları saklar; başka biri açtığında onun programı aynı anlaşmayı kullanarak sayıları tekrar harflere çevirir. İkisi aynı tabloyu kullanmıyorsa metin bozuk çıkar.

İki fikri ayırmak gerekir. Biri karakter kümesidir: hangi sayıların hangi simgelere karşılık geldiğinin listesi. Diğeri bu sayıların baytlar olarak nasıl saklandığıdır. ASCII'de ikisi basitçe örtüşür; Unicode'da örtüşmez ve işte burada UTF-8 devreye girer.

ASCII: 7 bitlik 128 karakter

ASCII (American Standard Code for Information Interchange'in kısaltması) 1960'larda standartlaştırıldı. 7 bit kullanır; yani 2'nin 7. kuvveti = 128 kod, 0'dan 127'ye. Bunların 33'ü kontrol karakteridir (0'dan 31'e ve 127) ve 95'i yazdırılabilirdir (32'den 126'ya, boşluk dahil).

Ç, ğ, ı, ö, ş, ü gibi harfleri ve euro simgesini içermez: İngilizce için tasarlandı. Bu, daha sonra neden başka tablolara ihtiyaç duyulduğunu açıklar.

En çok karşılaşacağın kodlar. Boşluk (32), görünmese de yazdırılabilir sayılır.
Kontrol karakteriOnlukOnaltılıkİkili (7 bit)Ne işe yarar
Boş (NUL)0000000000Birçok dilde bir dizenin sonunu işaretler
Yatay sekme (TAB)9090001001Bir sonraki sekme durağına atlar
Satır besleme (LF)100A0001010Bir sonraki satıra iner
Satır başı (CR)130D0001101Satırın başına döner
Çıkış (ESC)271B0011011Kontrol dizilerini başlatır
Boşluk32200100000İlk yazdırılabilir karakter
Silme (DEL)1277F1111111Karakteri siler

Hatırlamaya değer ilişkiler

Tablo rastgele sıralanmamıştır. Birkaç düzenlilikle kodları ezbere okuyabilirsin.

Satır sonu: LF, CR ve CRLF

Bir satır sonu basit görünür, ama sisteme göre farklı yazılır. Unix, Linux ve macOS tek bir karakter kullanır: LF (10). Windows art arda iki tane kullanır, CR ve LF (13 ve 10), yani CRLF. Eski teleprinterlerin iki ayrı komuta ihtiyacı vardı: arabayı başa döndürmek ve kâğıdı bir satır ilerletmek.

Bu fark, basit bir editörde her şeyin tek satırda göründüğü ya da her satırın sonunda tuhaf bir simge bulunduğu dosyaların nedenidir. Her birinin hangi koda sahip olduğunu merak edersen, ASCII tablosunun arama alanına LF ya da CR yaz.

“Genişletilmiş ASCII” bir standart değildir

Bir bayt 8 bit olduğundan ve ASCII yalnızca 7 kullandığından, 128 boş kod kalıyordu (128'den 255'e) ve her üretici ve bölge bunları kendi yöntemiyle doldurdu. Buna “genişletilmiş ASCII” denir, ama tek bir tablo yoktur: kod sayfaları denen birçok tablo vardır. En bilinen ikisi, é harfinin 233 kodu olduğu Latin-1 (ISO-8859-1) ve benzer olan ama 128 ile 159 arası kodlarda farkları bulunan Windows-1252'dir (örneğin euro oradadır). Türkçe için de ISO-8859-9 ve Windows-1254 gibi tablolar vardı.

Sorun şu: 233 kodu bir tabloda “é” anlamına gelir, bir başkasında başka bir şey. Bir tabloyla yazılıp başka bir tabloyla okunan metin çöp gösteriyordu. Unicode bu karmaşayı bitirmek için doğdu.

Unicode ve UTF-8

Unicode, dünyadaki hemen hemen tüm yazı sistemlerinin her karakterine, ayrıca simgelere ve emojilere, kod noktası denen benzersiz bir sayı atar. Bugün 150.000'den fazla karakteri vardır. U+ öneki ve onaltılık olarak yazılır: “A” U+0041, “ç” U+00E7, euro U+20AC ve gülen yüz emojisi U+1F600'dür. İlk 128 kod noktası tam olarak ASCII'dekilerdir.

UTF-8, bu sayıları baytlar olarak saklamanın en çok kullanılan yoludur ve karaktere göre 1 ile 4 arasında bayt kullanır. ASCII'nin 128'i her zamanki gibi tek bir bayt kaplar; bu yüzden bir ASCII metin aynı zamanda geçerli bir UTF-8 metindir. Gerisi daha fazla bayt kaplar.

ASCII'den ne kadar uzaksa karakter o kadar çok bayt kaplar.
KarakterKod noktasıUTF-8'de baytBaytlar (onaltılık)
AU+0041141
çU+00E72C3 A7
şU+015F2C5 9F
€U+20AC3E2 82 AC
😀U+1F6004F0 9F 98 80

“ç” yerine neden “ç” görünür

En yaygın hatadır ve kesin bir açıklaması var. UTF-8'de ç iki bayttır: C3 ve A7. Bir program metnin Latin-1'de olduğunu sanırsa her baytı bir karakter olarak okur: C3 “Ô, A7 ise “§”dir. Sonuç: “ç”. Aynı şey “ü” ile de olur, “ü” görünür, ve “çok” kelimesi “çok” olarak çıkar.

Çözüm neredeyse her zaman programa dosyayı UTF-8 olarak açmasını söylemektir (bir metin editöründe ya da bir hesap tablosunun içe aktarma ayarlarında). Tersi olduğunda, yani Latin-1 metin UTF-8 olarak okunduğunda, genellikle soru işaretli eşkenar dörtgenler çıkar, çünkü bu tekil baytlar geçerli UTF-8 dizileri oluşturmaz.

ASCII tablosu ve çevirici nasıl kullanılır

“ASCII tablosu” aracı 128 karakteri onluk, onaltılık, sekizlik ve ikili kodlarıyla ve kontrol karakterlerinin adıyla birlikte gösterir.

  1. Satırını bulmak için arama alanına bir karakter, bir kod ya da bir kontrol karakterinin adını yaz (örneğin A, 65, 41 ya da LF).
  2. Yalnızca bir grubu görmek için filtre düğmelerini kullan (Kontrol, Rakamlar, Büyük harfler, Küçük harfler, İşaretler).
  3. Çevirmek için “Metin” alanına bir metin yaz ve biçimi seç (ondalık, onaltılık, sekizlik ya da ikilik): altta kodlar görünür. “Hello” onlukta 72 101 108 108 111 ve onaltılıkta 48 65 6C 6C 6F verir.
  4. Tersini de yapabilirsin: boşluk ya da virgülle ayrılmış kodları “Kodlar” alanına yapıştır ve metin oluşur. Onaltılıkta 0x41 gibi önekler kabul edilir.

Metinde ç gibi ASCII olmayan karakterler varsa araç bunu bildirir ve Unicode kodunu gösterir. UTF-8'deki gerçek baytları görmek için “Metni binary koda çevirme” aracını kullan: ç 11000011 10100111 verir; 8 bitlik iki bayt. Sınırlar: tablo yalnızca standart ASCII'yi gösterir, genişletilmişi değil ve her şey tarayıcında hesaplanır, metin hiçbir sunucuya gönderilmez.

Sık sorulan sorular

ASCII kaç karakterden oluşur?

128; kodlar 0'dan 127'ye ve her biri 7 bit. Bunların 33'ü kontrol, 95'i yazdırılabilir karakterdir; boşluk dahil.

A ve a harflerinin ASCII kodu nedir?

“A” 65 (onaltılıkta 41, ikilide 01000001) ve “a” 97 (onaltılıkta 61, ikilide 01100001). Aralarında her zaman 32 fark vardır.

ASCII ile Unicode arasındaki fark nedir?

ASCII, İngilizce için düşünülmüş 128 karakterdir. Unicode'un neredeyse tüm dillerden ve emojilerden 150.000'den fazla karakteri vardır ve ilk 128'i ASCII'dekilerle aynıdır.

UTF-8 nedir?

Unicode metnini baytlar olarak saklamanın en çok kullanılan yoludur. Karakter başına 1 ile 4 bayt kullanır: ASCII olanlar bir, bir ç iki ve bir emoji dört bayt kaplar.

Metnim neden “ç” ya da “ü” gösteriyor?

Çünkü UTF-8 olarak kaydedilmiş bir metin Latin-1 olarak okunuyor. Dosyayı UTF-8 kodlamasını belirterek aç ve sorun çözülür.