UTF-16 Kodlayıcı

UTF-16 kod birimlerini onaltılık olarak görmek için metin girin.

Nasıl hesaplanır?

Araç metni UTF-8 olarak okur, her karakterin kod noktasını bulur ve UTF-16 kod birimlerini dört haneli büyük harfli onaltılık sayı olarak yazar. U+FFFF’e kadar olan bir kod noktası, kod noktasına eşit tek bir birimdir. Bundan büyük kod noktası vekil çifte bölünür: v = kn − 0x10000, yüksek = 0xD800 + (v ≫ 10), düşük = 0xDC00 + (v & 0x3FF). Birimler bayt sırası işareti olmadan büyük uçlu (UTF-16BE) sırayla gösterilir; UTF-16LE’de her birimin iki baytı yer değiştirir. Sayaç karakter değil kod birimi sayısıdır; çiftler varsa karakter sayısından büyük olur. Boş giriş ya da geçersiz UTF-8 sonuç vermez.

Örnek hesaplama

"Hi😀" metnini kodlayalım. H, U+0048 olduğundan birimi 0048, i ise U+0069 olduğundan 0069’dur. 😀 emojisi U+1F600’dür ve U+FFFF’in üstünde olduğu için 0x10000 çıkarılır: 0x1F600 − 0x10000 = 0xF600. Yüksek 10 bit 0xF600 ≫ 10 = 0x3D olur; yüksek = 0xD800 + 0x3D = D83D. Düşük 10 bit 0xF600 & 0x3FF = 0x200’dür; düşük = 0xDC00 + 0x200 = DE00. Araç 0048 0069 D83D DE00 sonucunu verir; yani 3 karakter için 4 kod birimi.

Bu örneği dene →

Sık yapılan hatalar

  • Birim sayısından karakter sayısını çıkarmaya çalışmak. Emoji gibi ek düzlem karakterleri iki birim tutar; "Hi😀" 3 karakterdir ama 4 kod birimidir, JavaScript’te de uzunluğu 4’tür.
  • Çıktıyı UTF-8 baytı sanmak. € için 20AC bir UTF-16 birimidir; UTF-8 biçimi E2 82 AC üç baytıdır.
  • Bayt sırası işareti ya da küçük uçlu sıra beklemek. Birimler FEFF olmadan büyük uçlu gösterilir; UTF-16LE dosyası için her birimin baytlarını çevirin (0048, 48 00 olur).
  • D83D ya da DE00 değerini tek başına bir karakter saymak. Vekil birim yalnızca eşiyle birlikte anlamlıdır, tek başına duramaz.
  • Boşluk, satır sonu ya da sıfır genişlikli birleştirici gibi görünmeyen karakterleri farkında olmadan yapıştırmak. Bunlar da kodlanır (boşluk 0020’dir).

Bu hesaplama hakkında

UTF-16, Unicode metnini 16 bitlik kod birimlerinden oluşan bir dizi olarak kodlar. Temel Çok Dilli Düzlem’deki (BMP, U+0000 ile U+FFFF arasındaki kod noktaları — Latin, Kiril, Yunan, çoğu CJK ideogramı ve daha fazlasını kapsar) herhangi bir karakter, kod noktasına eşit tek bir 16 bitlik kod birimi olarak doğrudan temsil edilir. BMP dışındaki karakterler — emoji, birçok tarihsel ve daha az yaygın yazı sistemi ile ek CJK ideogramlarını içeren U+10000’den U+10FFFF’e kadar olan kod noktaları — 16 bite sığmadığından, UTF-16 bunları bir vekil çift (surrogate pair) ile temsil eder: yalnızca birlikte görünen ayrılmış aralıklardan alınan iki 16 bitlik birim.

Vekil çift, kod noktasından 0x10000 çıkarılarak 20 bitlik bir değer elde edilmesi, ardından bunun yüksek 10 bitinin 0xD800’e eklenmesi (0xD800–0xDBFF aralığında bir “yüksek vekil” verir) ve düşük 10 bitinin 0xDC00’e eklenmesiyle (0xDC00–0xDFFF aralığında bir “düşük vekil”) oluşturulur. Bu, geliştiriciler için doğrudan önemlidir çünkü JavaScript dizeleri, Java karakterleri ve Windows API’si dahili olarak UTF-16 kullanır; tek bir emojinin JavaScript’te .length değerinin 2 olarak raporlanmasının nedeni budur. Bu hesaplayıcı, girilen metni UTF-16 kod birimlerine kodlar, her birini onaltılık olarak gösterir ve gerektiğinde vekil çiftler kullanır.

Bu faydalı oldu mu?

En fazla 3 tepki seçebilirsiniz.

Yorumlar (1)

  • Editör ekibi

    Gösterilen kod birimleri kaçış dizisi olarak da kullanılır. Varsayılan Hi ve gülen yüz karakteri için D83D DE00 çifti, JavaScript, Java veya JSON dizgisinde \uD83D\uDE00 diye yazılır. Araç birimleri saydığı için bildirdiği 4, JavaScript'te bu metnin length değeriyle aynıdır. UTF-16LE çıktısına ya da her birimin başında 0x ön ekine de ihtiyaç duyuyor musunuz?

Popüler hesaplayıcılar

Tüm Hesaplayıcılar