2011-02-03 22 views
13

jakie znaki unikodowe mieszczą się w 1, 2, 4 bajtach? Czy ktoś może wskazać mi, żebym ukończył wykres postaci?Kodowanie UTF-8 Kodowanie rozmiaru:

+4

Przeczytaj najpierw: http://www.joelonsoftware.com/articles/Unicode.html –

+2

Kompletny wykres? To będzie OGROMNE. Zobacz to dla wydrukowanej wersji Basic Multilingual Plane (jest ich jeszcze 16): http://shop.designinmainz.de/en/Poster/decodeunicode-Basic-Multilingual-Plane-BMP-Map Zobacz DecodeUnicode dla typu wiki reprezentacja znaków Unicode: http://www.decodeunicode.org/en – Piskvor

+0

Można również przeczytać o Universal Codes: http://en.wikipedia.org/wiki/Universal_code_%28data_compression%29 – ruslik

Odpowiedz

21

Znaki są kodowane zgodnie z ich położeniem w zakresie. rzeczywiście można znaleźć algorytm na stronie Wikipedia dla UTF-8 - można wdrożyć bardzo szybko Wikipedia UTF8 Encoding

  • U + 0000 do U + 007F są (słusznie) zakodowane z jednego bajta
  • U + 0080 do U + 07FF są kodowane z 2 bajtów
  • 0800 U + U + FFFF są kodowane 3 bajty
  • U + 010000 U + 10FFFF są kodowane z 4 bajtów
4

artykuł na UTF-8 jest wystarczająco dobry opis kodowania:

  • 1 bajt = punkt kodu 0x000000 do 0x00007F
  • punktów
  • 2 bajtów = kod 0x000070 do 0x0007FF
  • punktów
  • 3 bajtów = kod 0x000800 do 0x00FFFF
  • 4 Bajty = punkty kodowe 0x010000 do 0x10FFFF

Wykresy można pobrać bezpośrednio z unicode.org. Jest to zbiór około 150 plików PDF, ponieważ pojedynczy wykres byłby ogromny (może 30 MB).

Należy również pamiętać, że kodowanie Unicode (w porównaniu do czegoś podobnego do ASCII) jest znacznie bardziej skomplikowane - istnieją takie rzeczy jak tekst od prawej do lewej, znaki kolejności bajtów, punkty kodowe, które można łączyć ("komponować") w celu utworzenia pojedyncza postać i różne sposoby reprezentowania dokładnie tego samego ciągu znaków (i procesu przekształcania ciągów znaków w kanoniczną formę odpowiednią do porównania), dużo więcej znaków białych znaków itp. Zaleciłbym pobranie całej specyfikacji Unicode i przeczytanie większości z tego, jeśli planujesz zrobić więcej niż "niewiele".

1

Kompromisy UTF-8 od 1 do limitu 6 bajtów, chociaż obecna ilość punktów kodowych pokryta jest tylko 4 bajtami. UTF-8 stosuje pierwszy bajt, aby określić, jak długo (w bajtach) postać jest - zobaczyć różne linki do strony Wiki:

UTF-8 Wikipedia

pojedynczy bajt UTF-8 jest skutecznie ASCII - UTF-8 zaprojektowany, aby być z nim zgodny, dlatego jest bardziej rozpowszechniony niż UTF-16, na przykład.


Edycja: Wydaje się, że ustalono, punkty kodowe UTF-8 'nie więcej niż 21 bitów (4 sekwencje bajty) - ale ma możliwości techniczne obsługiwać do 31 bitów (6 bajtów UTF-8) .

+0

Format UTF-8 jest ograniczony do 4 bajtów. Punkty kodu Unicode są ograniczone do U + 1FFFFF (21 bitów), a kodowanie UTF-8 jest kanoniczne (musi wybrać najkrótszy). Dlatego nigdy nie można skończyć z 5-bajtową sekwencją UTF-8. Albo będzie dekodował do postaci po U + 1FFFFF, albo nie byłby kanoniczny. – MSalters

+0

Obecny zestaw znaków UTF-8 wykorzystuje tylko 4 bajty, ale został zaprojektowany dla punktów kodowych do 31 bitów - co daje sekwencję 6-bajtową. – Mikaveli

+2

* Znaki 6-bajtowe *? [shudder] – Piskvor