Proszę o policzenie wszystkich możliwych prawidłowych kombinacji w Unicode z wyjaśnieniem.
1 111 998 : 17 płaszczyzn × 65 536 znaków na płaszczyznę - 2048 surogatów - 66 nie-znaków
Zauważ, że UTF-8 i UTF-32 teoretycznie mogą zakodować znacznie więcej niż 17 płaszczyzn, ale zasięg jest ograniczony ze względu na ograniczenia kodowania UTF-16 .
137 929 punktów kodowych jest faktycznie przypisanych w Unicode 12.1 .
Nie rozumiem też, dlaczego bajty kontynuacji mają ograniczenia, mimo że początkowy bajt tego znaku określa, jak długo powinien być.
Celem tego ograniczenia w UTF-8 jest uczynienie kodowania samosynchronizującymi .
Dla kontrprzykładu rozważmy chińskie kodowanie GB 18030 . Tam litera ß
jest reprezentowana jako sekwencja bajtów 81 30 89 38
, która zawiera kodowanie cyfr 0
i 8
. Więc jeśli masz funkcję wyszukiwania ciągów znaków, która nie została zaprojektowana dla tego specyficznego dla kodowania dziwactwa, to wyszukiwanie cyfry 8
znajdzie fałszywie dodatni wynik w literze ß
.
W UTF-8 nie może się to zdarzyć, ponieważ brak nakładania się między bajtami wiodącymi i bajtami śladu gwarantuje, że kodowanie krótszego znaku nigdy nie może nastąpić w ramach kodowania dłuższego znaku.