Standard Unicode ma wystarczającą liczbę punktów kodowych, że potrzebujesz 4 bajtów, aby je wszystkie zapisać. To właśnie robi kodowanie UTF-32. Jednak kodowanie UTF-8 w jakiś sposób wciska je do znacznie mniejszych przestrzeni, używając czegoś, co nazywa się „kodowaniem o zmiennej szerokości”.
W rzeczywistości udaje mu się przedstawić pierwsze 127 znaków US-ASCII w jednym bajcie, który wygląda dokładnie jak prawdziwy ASCII, więc możesz interpretować wiele tekstu ascii tak, jakby był to UTF-8, nie robiąc nic z tym. Sztuczka. Jak to działa?
Mam zamiar zadać i odpowiedzieć tutaj na moje własne pytanie, ponieważ właśnie trochę przeczytałem, aby to zrozumieć i pomyślałem, że może to zaoszczędzić komuś trochę czasu. Poza tym może ktoś może mnie poprawić, jeśli coś źle zrozumiałem.
źródło
Odpowiedzi:
Każdy bajt zaczyna się od kilku bitów, które informują, czy jest to jednobajtowy punkt kodowy, wielobajtowy punkt kodowy, czy też kontynuacja wielobajtowego punktu kodowego. Lubię to:
Każdy z wielobajtowych punktów kodowych zaczyna się od kilku bitów, które zasadniczo mówią „hej, musisz także przeczytać następny bajt (lub dwa lub trzy), aby dowiedzieć się, kim jestem”. Oni są:
Wreszcie wszystkie bajty następujące po tych kodach startowych wyglądają następująco:
Ponieważ możesz określić, na jaki bajt patrzysz, z kilku pierwszych bitów, to nawet jeśli coś zostanie gdzieś zniekształcone, nie stracisz całej sekwencji.
źródło
next char is continuation
? Gdybyśmy otrzymali znak 3-bajtowy, wyglądałoby to1xxxxxxx 1xxxxxxx 0xxxxxxx
tak:, więc mniej miejsca byłoby marnowane.RFC3629 - UTF-8, format transformacji ISO 10646 jest tutaj ostatecznym autorytetem i zawiera wszystkie wyjaśnienia.
Krótko mówiąc, kilka bitów w każdym bajcie zakodowanej w UTF-8 sekwencji od 1 do 4 bajtów reprezentującej pojedynczy znak jest używanych do wskazania, czy jest to bajt końcowy, bajt wiodący, a jeśli tak, to ile kolejnych bajtów. Pozostałe bity zawierają ładunek.
źródło
Fragment z absolutnego minimum Każdy programista absolutnie, pozytywnie musi wiedzieć o Unicode i zestawach znaków (bez wymówek!)
źródło