Wpis z mikrobloga

Wytłumaczy mi ktoś po co w utf-16 unicode zapisujemy np. znak o współrzędnej kodowej U+1D56B jako U+D835 oraz U+DD6B? Po co jest te rozbijanie 10 bitów MSB i LSB i takie zapisywanie na 32bitach zamiast 20?
Nawet jeśli nie może mieć 20bitów, bo słowo ma 32bity to czemu akurat takie operacje do zakodowania znaku.
#programowanie
  • 8
  • Odpowiedz
@GotoFinal: w UTF-16 jeśli znak jest "standardowy" to wystarczy 1bajt.
te kodowanie rezerwuje sobie dwa przedziały liczbowe, potrzebne bo znaków które są powyżej U+0FFFF.

Przypuszczam, że te przedziały to taka flaga dla systemu, że znak będzie w dwóch słowach albo w jednym ( żeby dla 1bajtowych znakow, nie trzeba było 2bajta tylko na samą flagę ).
Ale nie jestem pewien.
  • Odpowiedz
@Lewo: wywaliłem tamto, bo coś tam czytam, i z tego co widzę, to UTF-16 używa jednak zawsze 2 bajtów, więc jak znak potrzebuje więcej niż 16, to muszą być użyte 2x16.
  • Odpowiedz
@GotoFinal: jest dobrze opisane jak to koduje, ale nie wiem dlaczego akurat w ten sposób.
Np. ja bym zrobił tak: zabraniam kodować 1111 1111 1111 XXXX.
i jak widzę taki ciąg to znak będzie z 20 bitów i patrzę na 2 słowa 1111 1111 1111 XXXX
i drugie XXXX XXXX XXXX XXXX.
  • Odpowiedz
@Lewo: FFFF to już są 2 bajty, chyba coś źle patrzysz na bajt, bajt ma 256 wartości, od 0x00 do 0xFF, 0xFFFF to już 2 bajty, i utf-16 operuje na wartościach 2 bajtowych - 16 bitowych, co oznacza 1 code point dla utf-16.
Więc proste znaki też są zapisywane na 2 bajtach - 1 code point (nie wiem jak to po polsku się nazywa :D), a bardziej skomplikowane na 4 bajtach
  • Odpowiedz