Glossary
Unicode
Her dil için karakter kodlama standardı
By Buğra SözeriPublished Updated
Unicode, Unicode Konsorsiyumu tarafından sürdürülen evrensel karakter kodlama standardıdır. Resmi olarak önerilip kabul edilen her yazı sistemindeki her karaktere benzersiz bir sayı (“kod noktası”) atar — şu anda modern diller, tarihi yazı sistemleri, matematiksel semboller, teknik gösterimler ve emojiler dahil 161 komut dosyasında yaklaşık 150.000 karakter.
Kod noktaları U+XXXX (4-6 onaltılık basamak) biçiminde yazılır. A harfi U+0041; Türkçe noktasız i U+0131; roket emojisi U+1F680’dir.
Unicode’un kendisi kod noktalarının bayta nasıl dönüştürüleceğini belirtmez — bu, kodlamaların işidir. Üç ana kodlama:
- UTF-8 — kod noktası başına değişken genişlikte 1-4 bayt. ASCII uyumlu. Baskın web kodlaması.
- UTF-16 — kod noktası başına 2 veya 4 bayt. Java, JavaScript dizeleri ve Windows tarafından dahili olarak kullanılır.
- UTF-32 — kod noktası başına tam olarak 4 bayt. Basit ama israf; depolama için nadiren kullanılır.
Convertitive’nin araçları gereken yerlerde tam Unicode’u destekler — Base64 kodlayıcısı UTF-8’i doğru işler, kelime sayacı kod noktalarını ve grafem kümelerini sayar, büyük/küçük harf dönüştürücü Türkçeye özgü büyük/küçük harf kurallarını dikkate alır (noktalı ve noktasız İ sorunu).
Kod noktası ≠ karakter ≠ grafem kümesi — her dize kütüphanesini bozan ayrım: “é” harfi Unicode’da iki şekilde temsil edilebilir — tek U+00E9 kod noktası (önceden birleştirilmiş) veya U+0065 (e) ile ardından U+0301 (birleştirici aksan üstü). Her ikisi de aynı şekilde görünür; her ikisi de bir insana “bir karakter” gibi gelir; biri bir kod noktasıdır, diğeri iki. Emojiler daha karmaşıktır: 👨👩👧 (aile) yedi kod noktasından oluşan bir ZWJ dizisidir, ancak bir grafem kümesidir. JavaScript’teki uzunluk sayıları (str.length) grafem kümeleri değil UTF-16 kod birimlerini döndürür — aile emojisinin dize uzunluğu 11’dir. Doğru grafem sayısı için Intl.Segmenter (modern tarayıcılar, Node 16+) kullanın.
Unicode normalleştirme biçimleri — metnin kendisiyle eşleşmediği durumlar: görsel olarak özdeş iki dize, yukarıdaki önceden birleştirilmiş ve ayrıştırılmış ayrımı nedeniyle farklı bayt gösterimlerine sahip olabilir. Unicode Standardı, bunu kanonikleştiren dört normalleştirme biçimi tanımlar (NFC, NFD, NFKC, NFKD). NFC (birleşik) HTML ve çoğu dosya sistemi için varsayılandır; NFD (ayrıştırılmış) macOS HFS+’in varsayılanıdır ve dosya yollarının bazen sistemler arasında özdeş görünüp eşit olmadığı karşılaştırmalar yapmasının nedenidir. Veritabanı dize eşitliği ve arama dizini aramaları, “özdeş sorgu eşleşmiyor” hatasını önlemek için yazma sırasında NFC’ye normalleştirmelidir. Referans: Unicode Standardı, Sürüm 15.
Çalışılmış örnek
“café” dizesini ele alın. İki eşit derecede geçerli Unicode temsili: NFC = U+0063 U+0061 U+0066 U+00E9 (4 kod noktası), NFD = U+0063 U+0061 U+0066 U+0065 U+0301 (5 kod noktası, “e” + birleştirici aksan). Her ikisi de aynı şekilde görünür. Şimdi her birinin farklı sayımlarda nasıl göründüğüne bakın: UTF-8’de NFC 5 bayttır (63 61 66 C3 A9); NFD 6 bayttır (63 61 66 65 CC 81). JavaScript’te: "café".length NFC için 4, NFD için 5. Normalleştirmeden eşitliği karşılaştırın: nfc === nfd sonucu false. Her ikisini de önce String.prototype.normalize("NFC") üzerinden çalıştırın: özdeş hale gelirler. Hata düzeltildi. Bu, Mac ve Windows istemcilerinin karışık kullanımından kaynaklanan kullanıcı gönderilen adları depolayan veritabanlarında “José’yi aradım, kayıt var ama geri gelmiyor” durumunun tam kök nedenidir.
Ne zaman ve neden önem taşır
Her uluslararasılaştırılmış uygulama, bir noktada Unicode kenar durumlarıyla karşılaşır: birleştirici işaretli kullanıcı adları, macOS (NFD) ve Linux (NFC) arasında kopyalanan dosya yolları, yığılmış aksan işaretli Vietnamca, Türkçe büyük/küçük harf kuralları (“I”’nın küçük harfi “i” değil “ı”’dır — “Türkçe-I sorunu” 2018’de gerçek iOS çökmelerine yol açtı), Arapça ve İbranice sağdan sola metin oluşturma ve bileşen kod noktalarının telefon yazı tipi güncellemelerinden daha hızlı gelişen ZWJ tabanlı emojiler. Savunma kuralları: girişte NFC’ye normalleştirin, yerel ayara duyarlı sıralama için Intl.Collator kullanın (Array.sort’un kod noktası sıralaması değil), grafem kümesine duyarlı kısaltma için Intl.Segmenter kullanın ve yerel ayara özgü davranışı sabit kodlamak yerine CLDR’nin (Unicode’un yerel ayar veritabanı) yönlendirmesine bırakın. Referans: Unicode Teknik Raporu #15 — Normalleştirme Biçimleri.
Frequently asked questions
- Unicode nedir?
- Unicode, aktif kullanımdaki her yazı sistemindeki her karaktere benzersiz bir kod noktası atayan evrensel karakter kodlama standardıdır — şu anda 161 komut dosyasında yaklaşık 150.000 karakter. Modern yazılımlarda tüm metin işlemlerinin temelidir.
- Unicode pratikte nasıl çalışır?
- Her karakterin bir kod noktası vardır (örn. A için U+0041, gülen yüz emojisi için U+1F600). Bunlar UTF-8, UTF-16 veya UTF-32 gibi bir kodlama kullanılarak bellekte depolanır. UTF-8, ASCII karakterlerini 1 bayta, diğerlerini 2-4 bayta sığdıran baskın web kodlamasıdır.
- Unicode ile UTF-8 arasındaki fark nedir?
- Unicode, karakterleri kod noktalarıyla eşleyen soyut standarttır. UTF-8 ise bu kod noktalarını depolama ve iletim için bayta dönüştüren çeşitli kodlamalardan biridir. UTF-8, ASCII uyumlu olduğu ve Latin alfabeli metinler için alan bakımından verimli olduğu için en popüler kodlamadır.
Related
Published May 14, 2026 · Last reviewed May 31, 2026