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 0i 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 8znajdzie 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.