Je demande le compte de toutes les combinaisons valides possibles en Unicode avec explication.
1,111,998 : 17 plans × 65,536 caractères par plan - 2048 substituts - 66 non-caractères
Notez que UTF-8 et UTF-32 pourraient théoriquement encoder beaucoup plus que 17 plans, mais la plage est limitée en fonction des limitations de l'encodage UTF-16.
137,929 points de code sont réellement assignés dans Unicode 12.1.
Je ne comprends pas non plus pourquoi les octets de continuation ont des restrictions même si l'octet de démarrage de ce caractère indique sa longueur.
L'objectif de cette restriction en UTF-8 est de rendre l'encodage auto-synchronisant.
Par exemple, considérons l'encodage Chinois GB 18030. Là-bas, la lettre ß
est représentée par la séquence d'octets 81 30 89 38
, qui contient l'encodage des chiffres 0
et 8
. Ainsi, si vous avez une fonction de recherche de chaîne non conçue pour cette particularité spécifique à cet encodage, une recherche du chiffre 8
trouvera un faux positif dans la lettre ß
.
En UTF-8, cela ne peut pas se produire, car le non-chevauchement entre les octets de tête et les octets de queue garantit que l'encodage d'un caractère plus court ne peut jamais apparaître dans l'encodage d'un caractère plus long.