Uluslararasılaştırma
2.2 UTF-16 (RFC 2781)
UTF-16 (Unicode Transformation Format - 16bit), Unicode BMP içinde
kalan karakterleri 2 byte'lık diziler olarak kodlar. BMP dışında kalan
karakterleri kodlayabilmek için surrogate pair (vekil çift?) denen
4 byte'lık diziler kullanılır.
| U+00000000 - U+0000FFFF |
xxxxxxxx xxxxxxxx |
| U+00010000 - U+0010FFFF |
110110xx xxxxxxxx 110111xx xxxxxxxx |
Çiftin üst on bitini içeren kısmı 0xD800 ile 0xDBFF arasındayken,
alt on biti taşıyan kısım 0xDC00 ile 0xDFFF arasındadır. Bu değerler
arasındaki 16 bitlik değerler Unicode üzerinde özel olarak UTF-16'ya
ayrılmış ve hiç bir karaktere atanmamıştır.
İşlemciler 16 bitlik değerleri bellekte tutmak için farklı yöntemler
kullanmaktadır. Örneğin 258 (0x0102) değeri little-endian işlemcilerde
0x02 0x01, big-endian işlemcilerde ise 0x01 0x02 diziliminde tutulmaktadır.
UTF-16 dizileri için bir endian standardı belirlenmemiştir. Metin
UTF-16BE ya da UTF-16LE olarak işaretlenmemişse (MIME, vb ile) işleyici
metnin ilk iki byte'ına bakar. Byte sıra işareti (Byte Order Mark,
BOM) adlı karakter (0xFEFF) metnin byte sıralanmasını göstermek için
ayrılmıştır. İlk iki byte 0xFF 0xFE ise metin little-endian, 0xFE
0xFF ise big-endian olarak işlenir. UTF-16 metinleri birbirine eklerken
araya gelen BOM karakterini çıkartmaya dikkat edilmelidir. İşaretlenmemiş
ve BOM taşımayan diziler için bir yol gösterilmemiştir.