Ana içeriğe geç

Karakter kodlaması

İngilizcesi
Character Encoding

Günlük kullanımda iki ad da yaygın.

Güncellendi 2 dk okuma

Bu sayfayı paylaşın

Bağlantıyı gönderin, tanımı bağlantısıyla birlikte alıntılayın ya da kendi sitenizde bir kart olarak gösterin.

https://softwaredictionary.org/tr/terimler/character-encoding

Kısaca

Karakter kodlaması, metni byte'lara ve geri metne çeviren kurallardır; her harfin saklanıp gönderilmesini sağlar. Bugünkü standart UTF-8'dir.

Karakter kodlaması (character encoding) nedir?

Bilgisayarlar yalnızca sayı saklar; bu yüzden bir metin dosyaya kaydedilmeden ya da ağ üzerinden gönderilmeden önce byte'lara dönüşmelidir. Bunun nasıl yapılacağını karakter kodlaması belirler. Unicode, bütün yazı sistemlerindeki her karaktere code point denen kendi numarasını verir: A harfi U+0041, Türkçedeki ç ise U+00E7'dir. UTF-8 gibi bir kodlama da her code point'in byte olarak nasıl yazılacağını söyler.

1960'lardan kalma ASCII 7 bit kullanıyor ve 128 karakteri kapsıyordu: İngilizce harfler, rakamlar, noktalama işaretleri ve kontrol kodları. Ardından her bölge için bir tane olmak üzere, Türkçe için ISO-8859-9 gibi, birbiriyle uyumsuz düzinelerce 8 bitlik kodlama geldi. UTF-8 bütün Unicode'u karakter başına 1 ila 4 byte ile kodlayıp düz ASCII metni olduğu gibi bırakarak bu karmaşaya son verdi; bugün neredeyse her web sayfası onu kullanıyor ve çoğu dilde ve araçta varsayılan kodlama o.

Metin ancak okuyan, yazanla aynı kodlamayı kullanırsa doğru görünür. UTF-8 bir dosyayı Windows-1254 olarak açarsanız ç, ç olur; bu bozulmaya mojibake denir. Web sayfalarının <meta charset="utf-8"> bildirmesinin, HTTP yanıtlarının Content-Type başlığında bir charset belirtmesinin ve veritabanlarıyla kaynak dosyaların en baştan UTF-8'e ayarlanmasının en iyisi olmasının nedeni budur.

Önemli noktalar

  • Karakter kodlaması metni byte'lara, byte'ları metne çevirir.
  • Unicode her karaktere bir numara verir; UTF-8 gibi bir kodlama da bu numaraların byte'a nasıl dönüşeceğine karar verir.
  • UTF-8 karakter başına 1 ila 4 byte kullanır ve ASCII metni olduğu gibi bırakır.
  • Metni yanlış kodlamayla okumak onu bozar; bu yüzden her yerde UTF-8 kullanın.

Örnek

Karakterlerden UTF-8 byte'larına, sonra yanlış kodlamayla gerijavascript
const bytes = new TextEncoder().encode("Aç"); // TextEncoder always writes UTF-8
console.log(bytes);                              // Uint8Array(3) [ 65, 195, 167 ]
console.log("ç".codePointAt(0).toString(16));    // "e7": the code point U+00E7

// The same bytes read as Windows-1254 instead of UTF-8:
console.log(new TextDecoder("windows-1254").decode(bytes)); // "Aç"

Sık sorulan sorular

Unicode ile UTF-8 arasındaki fark nedir?

Unicode bir katalogdur: her karaktere bir numara verir. UTF-8 bu numaraları byte olarak yazmanın yollarından biridir; UTF-16 ve UTF-32 de diğerleridir. Yani bir metin Unicode'dayken dosyası UTF-8 olarak kodlanmış olabilir.

Neden ç yerine ç gibi karakterler görüyorum?

Byte'lar bir kodlamayla yazılıp başka bir kodlamayla okunmuş; çoğunlukla UTF-8, Windows-1252 ya da Windows-1254 gibi tek byte'lık bir kodlamayla okunmuştur. Metni yazıldığı kodlamayla okuyun ve bu soru hiç gündeme gelmesin diye her yerde UTF-8 kullanın.

İlgili sayfalar

Kaynaklar

Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin

Daha fazla

Ayarlar