UTF-16 ve vekil çiftler (surrogate pairs)
Kısaca: UTF-16, Unicode karakterlerini 16 bitlik birimlerde saklar. İlk 65.536’nın ötesindeki karakterler iki birim, yani bir vekil çifti (surrogate pair) gerektirir.
Biraz daha ayrıntılı: Java, JavaScript, C# ve Windows dahilî olarak UTF-16 kullanır. Bu yüzden orada bir dizenin uzunluğu çoğu zaman görünür karakter sayısı değildir.
Ayrıntılı
- Temel düzlem (BMP): U+0000–U+FFFF kod noktaları bir birim kaplar.
- Vekil çifti: U+10000’den itibaren bir kod noktası (birçok emoji), yüksek (D800–DBFF) ve alçak (DC00–DFFF) bir birime ayrılır.
- Sonuç: JavaScript’te
"😀".length2’dir. Çiftin ortasından kesersen geçersiz bir karakter oluşur.Array.from(s)veyafor…ofkod noktası başına çalışır. - Bayt sırası: UTF-16LE ve UTF-16BE, çoğunlukla dosya başında BOM (byte order mark) ile.
- UTF-8’e karşı: UTF-8, ASCII uyumludur ve web standardıdır. UTF-16, çoğu CJK metninde pek tasarruf sağlamaz.
- Daha da ince: Görünür bir karakter birden çok kod noktasından oluşabilir (grafem kümeleri; örneğin bayraklar veya ten rengi emojileri).
Ayrıca bak: UTF-8 ve karakter kodlaması