2012-02-20 11 views
13

UTF-8 kodlamasında "devam eden baytlar" ın ne anlama geldiğini anlamaya çalışıyorum.UTF-8 Devam eden baytlar

Vikipedi hiçbir yararlı bilgiler ya tüm

Google arama döndürür adresinden tanımlamadan UTF-8 article bu terimi tanıtır. Resmi şartnameye atlamak üzereyim, ancak öncelikle yüksek seviyeli bir özeti okurdum.

+0

Vikipedi makalesini yeni düzenleyen biri gibi görünüyor. (: – tripleee

cevap

30

UTF-8'deki bir devam baytı, en üstteki iki bitin 10 olduğu herhangi bir bayttır. Çoklu bayt dizilerindeki sonraki baytlardır. Aşağıdaki tablo yardımcı olabilir:

İşte
Unicode code points Range Encoding Binary value 
------------------- -------- -------------------------- 
U+000000-U+00007f 0xxxxxxx 0xxxxxxx 

U+000080-U+0007ff 110yyyxx 00000yyy xxxxxxxx 
        10xxxxxx 

U+000800-U+00ffff 1110yyyy yyyyyyyy xxxxxxxx 
        10yyyyxx 
        10xxxxxx 

U+010000-U+10ffff 11110zzz 000zzzzz yyyyyyyy xxxxxxxx 
        10zzyyyy 
        10yyyyxx 
        10xxxxxx 

görebilirsiniz nasıl Unicode kod noktaları UTF-8 çok baytlık bayt dizileri için harita ve onların dengi ikili değerler. Bir bayt bir 0 biti ile başlayıp

  1. ise, tek bir bayt değeri az 128
  2. o 11 ile başlıyorsa, bir çok ilk bayt olduğunu var:

    temel kuralları bu vardır -bayt dizisi ve başlangıçta 1 bit sayısı, toplamda kaç bayt olduğunu gösterir (110xxxxx, iki bayta sahiptir, 1110xxxx üç tanesine sahiptir ve 11110xxx'un dördü vardır).

  3. 10 ile başlıyorsa, devam eden bir bayttır.

Bu fark bu şekilde bir kod noktası ilk baytı bulmak için bir dizi içinde herhangi bayt yedekleyemeyebilirsiniz olarak oldukça kullanışlı işleme sağlar. Sadece 10 bit ile başlamamış birini buluncaya kadar geriye doğru arama yapın.

Benzer şekilde, bir UTF-8 strlen için yalnızca 10xxxxxx bayt saymaz.

+0

Bence bu bir gerginlik/overbroading ... her neyse, yararlı bilgiler içeriyor! Ama ben neyi anlayamıyorum niçin '11' niçin gerekli olduğunu. '0' ve devamı olanlar (bunlar çok sayıda olabilir) 1 ile başlar. –

+0

@ ΈρικΚωνσταντόπουλος "_the byte byte" 0'_ "ile başlar - bu doğru değil. '0' ile başlayan bir bayt, bir tek bayt kod noktasıdır, bu nedenle ne bir _leading_ bayt ne de bir devamıdır. Yalnız kalır. Bunu, bir _sequence_'ın ilk baytı olduğunu ve daha fazla baytın tek bir kod noktasını temsil etmesi için takip etmesi gerektiğini gösteren '11' ile başlayan baytlardan farklı kılan şey budur. –

+0

@WilliamPrice Dunno neden bu konu dışı yorumu yayınladım, ama bence kendi kodlarımı icat etmeye çalışıyordum. –

0

Kısaca, bayt, bayt veya tek bayt dışında kalan baytlardır. UTF-8'de, devam eden baytlar 0x10 ile başlatılır.

+0

Alıntı ekliyorsanız, reddetmeyi kaldıracağım. –

0

“Devam bayt” bir terim ama normal bir İngilizce kelime ve terim değildir “bayt.” Sahte bir terim olarak kullanılırsa, o okuyucunun kafası karışabilir.

Unicode Standard, bu ifadeyi yalnızca bir yerde, Ch. 5, madde 5.22'de kullanır: "Örneğin, dört bayt UTF-8 dizisinin ilk üç baytını ve ardından geçerli bir devam eden baytı olmayan bir baytı düşünün. :. ”Bu bağlamda, anlam açıktır: bir şey devam eden bir bayt, yani bir bayt dizisi.

Vikipedi sayfası görünüşte bir karakterin kodlanmış formunun ilk byte hariç UTF-8 kodlamasında herhangi bir bayt yerine “devam byte” kullanır.