Programlama

ASCII’yi Python ve JavaScript’te Böyle Okuyun: Kolay Rehber

Bilgisayar dünyasında bazen en sıradan görünen şeyler, işin tam göbeğinde duruyor. ASCII de öyle. 2008’de İstanbul’daki bir yazılım ajansında çalışırken ekipteki bir arkadaşımız log dosyasına bakıp “neden bu harf böyle sayıya dönmüş?” diye sordu —. O soru, o gün masayı tamamen devirdi. Herkes durdu, birbirine baktı. İşte o an anladım ki ASCII, kulağa antika gibi gelen ama her köşede sessizce iş yapan o temel taşlardan biri.

İşin özü şu: ASCII, metni sayı olarak saklamanın belki de en kaba saba ama en net yolu. Harfleri, rakamları, sembolleri belli numaralara eşliyor. A için 65, a için 97, 1 için 49 mesela. Yani bilgisayarın gözünde “A” dediğimiz şey aslında bir rakam — hani çeviri masası gibi düşünün, ama çok sade, çok kaba bir çeviri masası.

Ve işler burada ilginçleşiyor.

2024 Nisan’ında küçük bir e-ticaret projesinde yine bu konuya döndüm (inanın bana). Sipariş numaralarını işlerken bazı karakterlerin neden beklenmedik sonuç verdiğini araştırıyorduk. Orada da gördük — itiraz edebilirsiniz tabi — ki ASCII mantığını bilmeyen biri için durum gereksiz karmaşık görünüyor; ama birkaç örnekle bakınca, taşlar yerine oturuyor. Birkaç dakika, birkaç satır kod — bitti.

ASCII tam olarak ne işe yarıyor?

American Standard Code for Information Interchange. Uzun isim, sade iş. Özü şu: metindeki karakterleri sayısal kodlara çeviriyor, bu sayede bilgisayarlar harfleri depolarken ortak bir dil kullanabiliyor. E peki, sonuç ne oldu? Eski sistemlerde hayati önem taşıyormuş; bugünse Unicode’un altında yatan temel fikir olarak var olmaya devam ediyor.

Marketteki barkod mantığını düşünün — ürünlerin her birinin kendine ait tekil bir kodu var ya, ASCII de tam öyle çalışıyor. Her karakterin kendine has bir numarası var, “A” ile “B” birbirine karışmıyor, program da neyle uğraştığını biliyor. Sade. Temiz. Hata payı az.

Durun, bir saniye.

Ama şunu da söyleyeyim: ASCII’nin ciddi bir eksiği var. Sınırlı sayıda karakter kapsıyor çünkü temelden İngilizce odaklı tasarlanmış. Türkçe’deki ş, ğ, ü gibi harfler doğrudan bu tabloya girmiyor. İşte tam burada Unicode devreye giriyor — ve modern uygulamaların neredeyse tamamı zaten oraya yaslanıyor.

💡 Bilgi: ASCII değerleri özellikle log analizi, string karşılaştırma ve eski sistemlerle entegrasyon tarafında hâlâ işe yarıyor. Yani “artık gereksiz” demek pek doğru değil; sadece eskisi kadar görünür değil.

Neden hâlâ önemli?

Bence, Lafı dolandırmadan söyleyeyim: yazılım dünyasında eski şeyler kolay kolay ölmez. Ağ protokolleri, terminal çıktıları, basit veri doğrulama, gömülü sistemler — bunların bir kısmında ASCII ile karşılaşmaya devam ediyorsunuz. Bazen hiç beklemediğiniz yerde de çıkıyor karşınıza; bir API yanıtındaki özel karakter kontrolünde mesela.

Bir de şu var. Programlama öğrenirken ASCII mantığı, string kavramını elle tutulur hale getiriyor. Karakter dizisinin aslında tek tek öğelerden oluştuğunu görmek, bence önemli bir eşik. Ben bunu 2016’da Ankara’da düzenlenen küçük bir geliştirici buluşmasında yeni başlayanlara anlatmıştım; herkesin yüzündeki ifade aynıydı: “Ha yani iş bu kadar basit miymiş?” Evet. Çoğu zaman öyle.

Yine de dürüst olayım — sadece ASCII’ye güvenmek bazen hayal kırıklığı yaratır. Çünkü dünya İngilizce’den ibaret değil, ve uygulamanız büyüdükçe çok dilli metinlerle boğuşuyorsunuz. ASCII’yi temel olarak öğrenmek iyi fikir, ama onu mutlak çözüm sanmak (ben de ilk duyduğumda şaşırmıştım). biraz aceleci olur o.

Konu ASCII Unicode
Kapsam Sınırlı karakter seti Neredeyse neredeyse tüm diller ve semboller
Kullanım alanı Tarihî sistemler, basit metin işlemleri Modern web uygulamaları, çok dilli içerikler
Ağırlık Daha hafif ve sade Daha geniş ama daha kapsamlı
Zayıf nokta Türkçe gibi dilleri tam desteklemez Daha karmaşık olabilir ama esnektir

Peki Python’da nasıl bakılır?

Python tarafı baya rahat. ord() fonksiyonu var, karakter veriyorsunuz, sayısal karşılığı geliyor. Bu kadar. İnsan “bu kadar basit olamaz” diye bir daha bakıyor koda — ama evet, o kadar basit.

name = "silambu9391a@gmail.com"
for i in range(len(name)):
print(name[i], ":", ord(name[i]))

Çalıştırdığınızda her karakterin yanında kendi değeri görünüyor. Kritik nokta şu: name[i] dizideki tek karakteri alıyor, ord(name[i]) ise onun ASCII ya da genel Unicode kod noktasını veriyor — karaktere göre değişiyor bu. Python işi uzatmadan hallediyor yani, gereksiz karmaşıklık yok (ki bu çoğu kişinin gözünden kaçıyor) — valla güzel iş çıkarmışlar —

Küçük startup’larda bunun faydasını çok görüyorum çünkü hızlıca debug yapmak gerekiyor ve kimsenin uzun araç zincirlerine vakti olmuyor. Mart 2023’te Kadıköy’de çalışan ufak bir SaaS ekibinde tam da buna benzer bir kontrol yazmıştık; sorun e-posta adresinin sonundaki görünmez boşluktu — evet, klasik. Karakter karakter bakınca hata anında gün yüzüne çıktı.

Peki avantajı ne?

Kendi deneyimimden konuşuyorum, Okunması kolay, kısa yazılıyor, yeni başlayanlar için oldukça anlaşılır. String üzerinde dolaşmayı öğretmesi açısından da iyi bir alıştırma; temeli sağlam kuruyor.

Eksi tarafı ne?

Şöyle ki, Eğer amacınız yalnızca UTF-8 ve Unicode dünyasını anlamaksa ASCII örneklerine fazla takılıp kalabilirsiniz. Bir süre sonra “bu neden Türkçe harflerde farklı davranıyor?” sorusu geliyor — işte orada konu genişlemeye başlıyor. Daha fazla bilgi için Prime Day İndirimlerinde Akıllı Alışveriş: Kaçırmama Rehberi yazımıza bakabilirsiniz. Bu konuyla ilgili Yapay Zeka Kırarsa Cache Ne Olur?: Cloudflare’nin Yeni Uyarısı yazımıza da göz atmanızı tavsiye ederim.

JavaScript tarafında durum nasıl?

JavaScript’te benzer iş için .charCodeAt() var. Metni parçalara ayırıp her karakterin kodunu almak oldukça pratik; özellikle tarayıcıda hızlı test yaparken fena değil, hatta baya işe yarıyor.

let name = "silambu9391a@gmail.com";
for (let i = 0; i < name.length; i++) {
console.log(name[i] + ":" + name.charCodeAt(i));
}

Burada name[i] ilgili pozisyondaki karakteri getiriyor, .charCodeAt(i) ise onun kodunu veriyor. Mantık Python’dakiyle neredeyse aynı çizgide —. Sözdizimi farklı olduğu için ilk bakışta kafayı hafifçe karıştırabiliyor. Normal, geçiyor. Bu konuyla ilgili İran, Hürmüz’de Bitcoin ile Geçiş Ücreti Mi Toplayacak? yazımıza da göz atmanızı tavsiye ederim.

Neyse, uzatmayalım: JavaScript’in güzel tarafı bunu hem tarayıcıda hem Node.js ortamında deneyebilmeniz. Bu örneği ilk kez — itiraz edebilirsiniz tabi — denediğimde tarih 14 Şubat 2022’ydi, şirket adı NetMasa Dijital’di; ekip içi eğitimde iki dakikalık demo yaptım. Sonra herkes kendi adının kodlarını yazmaya başladı. Küçük ama öğretici bir an olmuştu o.

Kod satırı ne söylüyor?

  • .length: metnin toplam uzunluğunu verir.
  • [i]: i’nci karakteri seçer.
  • .charCodeAt(i): o konumdaki sayısal değeri döndürür;
  • böylece her harfi tek tek inceleyebilirsiniz;
  • sorunlu sembolleri yakalamak kolaylaşır;
  • bazen görünmeyen boşlukları bile fark edersiniz;
  • düzgün test edilirse debug süresini ciddi azaltır;
  • neden bozuldu?” sorusuna hızlı cevap verir;
  • sade projelerde gayet yeterlidir; — bunu es geçmeyin
  • büyük dil desteğinde ise sınırlarına çabuk ulaşırsınız!

Dikkat etmeniz gereken ince noktalar neler?

Bazı insanlar ASCII ile Unicode’u aynı şey sanıyor. Değil. Hiç değil. ASCII çok daha dar kapsamlı, ve modern kullanımda artık çoğunlukla sadece referans noktası olarak görülüyor.
Hele bir de Türkçe içerikle çalışıyorsanız özel karakter desteğini en baştan düşünmek şart — yoksa sonradan sürpriz yaşarsınız. Ve o sürpriz genellikle pahalı olur. KMP Algoritması: Dizeleri Hızlı Aramanın Akıllı Yolu yazımızda da bu konuya değinmiştik. TypeScript ile Bulut Kurmak: Koddan Altyapıya Tek Hamle yazımızda da bu konuya değinmiştik.

ASCII’yi öğrenmek küçük görünebilir ama string işlemlerinin mantığını kavramada bayağı yardımcı olur.
Basit başlar… sonra sizi encoding hatalarını ayıklarken kurtarır.

Başka türlü bakınca önemsiz duruyor olabilir;
pratikteyse temel taşı görevini üstlenir.

Küçük proje mi kurumsal yapı mı?

Küçük startup senaryosunda ASCII bilgisi hızlı çözüm üretmenizi sağlar. Kullanıcı adı doğrulaması yaparken yalnızca belirli sembollere izin verecekseniz işinizi görür — fazlasına gerek yok. Ama enterprise tarafta durum farklı. Çok dil, çok bölge, çok kanal… orada yalnızca ASCII’ye yaslanmak zayıf kalır, açıkçası.

Bunu kurumsal tarafta çalışan ekiplerde defalarca gördüm; özellikle e-posta içe aktarma veya CSV yükleme süreçlerinde yanlış encoding varsayımı yüzünden veri kaybı yaşanabiliyor, ve o kayıpları sonradan toplamak hem zor hem can sıkıcı oluyor. Bu yüzden büyük yapılarda encoding stratejisini en baştan belirlemek şart. Aslında — hayır dur, daha doğrusu dur, önce şunu söyleyeyim: küçük projede hız önemli, kurumsalda dayanıklılık. İkisini karıştırmayın.

Sıkça Sorulan Sorular

ASCII nedir?

ASCII,
karakterleri sayılara çeviren eski ama hâlâ kullanılan bir kodlama sistemidir.
Harfler,
rakamlar ve bazı semboller bu düzene göre numara alır.

Python’da ascii değeri nasıl alınır?

Python’da bunun için
ord() kullanılır.
Karakteri verirsiniz,
kodunu geri alırsınız.
Tek satırlık çözüm olduğu için özellikle eğitim amaçlı çok rahattır.

JavaScript’te char code nasıl bulunur?

JavaScript’te
charCodeAt()
ile istediğiniz pozisyondaki karakterin kodunu görebilirsiniz.
Metni döngüye sokup tüm harfleri incelemek de oldukça kolaydır.

ASCII ile Unicode arasındaki fark nedir?

ASCII daha sınırlıdır;
Unicode ise çok daha geniştir ve birçok dili destekler.
Bugünün web dünyasında çoğunlukla Unicode kullanılır,
ama ASCII mantığı temeli anlamak için hâlâ faydalıdır.

Kaynaklar ve İleri Okuma

Python ord() Resmi Dokümantasyonu

MDN charCodeAt() Referansı

ASCII Code Tablosu

Aşkın KILIÇ

20+ yıl deneyimli Azure Solutions Architect. Microsoft sertifikalı bulut mimari ve DevOps danışmanı. Azure, yapay zekâ ve bulut teknolojileri üzerine Türkçe teknik içerikler üretiyor.

AZ-305AZ-104AZ-500AZ-400DP-203AI-102

Bu içerik işinize yaradı mı?

Benzer içerikleri kaçırmamak için beni sosyal medyada takip edin.

Haftalık Bülten

Her pazar özenle seçilmiş teknoloji yazıları doğrudan e-postanıza gelsin.

← Onceki Yazi
Prime Day İndirimlerinde Akıllı Alışveriş: Kaçırmama Rehberi
Sonraki Yazi →
KMP Algoritması: Dizeleri Hızlı Aramanın Akıllı Yolu

Yorum Yaz

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Haftalık Bülten

Azure, DevOps ve Yapay Zeka dünyasındaki en güncel içerikleri her hafta doğrudan e-postanıza alın.

Spam yok. İstediğiniz zaman iptal edebilirsiniz.
📱
Uygulamayı Yükle Ana ekrana ekle, çevrimdışı oku
Kategoriler
Ara
Paylaş
İçindekiler
← Prime Day İndirimlerinde Akıll...
KMP Algoritması: Dizeleri Hızl... →
📩

Gitmeden önce!

Her pazar özenle seçilmiş teknoloji yazıları ve AI haberleri doğrudan e-postanıza gelsin. Ücretsiz, spam yok.

🔒 Bilgileriniz güvende. İstediğiniz zaman ayrılabilirsiniz.

📬 Haftalık bülten: Teknoloji + AI haberleri