2013-03-28 19 views
7

Otrzymany kod Unicode zakodowany w UTF-8, który jest po prostu bajtami w pamięci.Podczas konwersji łańcucha zakodowanego w utf-8 z bajtów na znaki, w jaki sposób komputer wie, gdzie kończy się znak?

Jeśli komputer chce przekonwertować te bajty na odpowiadające mu punkty kodowe (numery) Unicode, skąd może wiedzieć, gdzie kończy się jedna z liter, a zaczyna się kolejna? Niektóre znaki są reprezentowane przez 1 bajt, inne za pomocą maksymalnie 6 bajtów. Więc jeśli masz

00111101 10111001 

To może reprezentować 2 znaki, lub 1. W jaki sposób komputer decyduje, które jest ją zinterpretować poprawnie? Czy istnieje jakaś konwencja, z której możemy dowiedzieć się z pierwszego bajtu, ile bajtów używa obecna postać lub coś takiego?

+0

Format UTF-8 został ograniczony do 4 bajtów 10 lat temu, prawdopodobnie używasz nieaktualnego źródła. W każdym razie [wikipedia] (http://en.wikipedia.org/wiki/UTF-8) całkiem dobrze wyjaśnia ten schemat. – Esailija

+0

To było stare źródło, ale to naprawdę nie zmienia tego pytania :) Masz jednak punkt, wikipedia jest całkiem jasne – Asciiom

Odpowiedz

13

Pierwszy bajt sekwencji wielobajtowym koduje długość sekwencji liczby bitów prowadzących 1:

  • 0xxxxxxx ma postać monoterapii;
  • 10xxxxxx jest kontynuacją znaku wielobajtowego;
  • 110xxxxx to pierwszy bajt 2-bajtowego znaku;
  • to pierwszy bajt 3-bajtowego znaku;
  • 11110xxx to pierwszy bajt czterobajtowej postaci.

bajty zawierające więcej niż 4 czołowych 1 bitów nie kodują akceptowane w UTF-8, ponieważ sekwencje 4-bajtowe już obejmuje więcej niż w całym zakresie Unicode U + 0000 U + 10FFFF.

Tak więc przykład postawiony w pytaniu ma jeden znak ASCII i jeden bajt kontynuacji, który nie koduje samemu znaku.

+0

Doskonała odpowiedź, dzięki! – Asciiom

Powiązane problemy