web-dev-qa-db-fra.com

Combien de caractères peuvent être mappés avec Unicode?

Je demande le nombre de toutes les combinaisons valides possibles dans Unicode avec explication. Je sais qu'un caractère peut être codé en 1,2,3 ou 4 octets. Je ne comprends pas non plus pourquoi les octets de continuation ont des restrictions même si l'octet de départ de ce caractère efface la durée.

71

Je demande le nombre de toutes les combinaisons valides possibles dans Unicode avec explication.

1111998 : 17 avions × 65536 caractères par avion - 2048 substituts - 66 non-caractères

Notez que UTF-8 et UTF-32 pourraient théoriquement coder beaucoup plus que 17 avions, mais la plage est restreinte en fonction de limitations du codage UTF-16 .

109 384 les points de code sont réellement attribués dans nicode 6. .

Je ne comprends pas non plus pourquoi les octets de continuation ont des restrictions même si l'octet de départ de ce caractère efface la durée.

Le but de cette restriction en UTF-8 est de faire le codage auto-synchronisation .

Pour un contre-exemple, considérons le codage chinois GB18030. Là, la lettre ß est représenté par la séquence d'octets 81 30 89 38, qui contient le codage des chiffres 0 et 8. Donc, si vous avez une fonction de recherche de chaîne non conçue pour cette bizarrerie spécifique au codage, alors une recherche pour le 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 principaux et les octets de suivi garantit que le codage d'un caractère plus court ne peut jamais se produire dans le codage d'un caractère plus long.

99
dan04

Unicode permet 17 plans , chacun des 65 536 caractères possibles (ou "points de code"). Cela donne un total de 1 114 112 caractères possibles. À l'heure actuelle, seulement environ 10% de cet espace a été alloué.

Les détails précis de la façon dont ces points de code sont encodés diffèrent avec l'encodage, mais votre question donne l'impression que vous pensez à UTF-8. La raison des restrictions sur les octets de continuation est vraisemblablement donc il est facile de trouver le début du caractère suivant (car les caractères de continuation sont toujours de la forme 10xxxxxx, mais l'octet de départ ne peut jamais être de cette forme).

9
Simon Nickerson

Unicode prend en charge 1 114 112 points de code. Il y a 2048 points de code de substitution, ce qui donne 1 112 064 valeurs scalaires. Parmi ceux-ci, il y a 66 non-caractères, conduisant à 1111998 caractères codés possibles (sauf si j'ai fait une erreur de calcul).

5
Philipp

Pour donner une réponse métaphoriquement précise, all of them.

Les octets de continuation dans les codages UTF-8 permettent la resynchronisation du flux d'octets codé face au "bruit de ligne". L'encodeur a simplement besoin de rechercher un octet qui n'a pas de valeur entre 0x80 et 0xBF pour savoir que l'octet suivant est le début d'un nouveau point de caractère.

En théorie, les codages utilisés aujourd'hui permettent l'expression de caractères dont le numéro de caractère Unicode peut atteindre 31 bits. En pratique, cet encodage est en fait implémenté sur des services comme Twitter, où la longueur maximale Tweet peut encoder jusqu'à 4 340 bits de données. (140 caractères [valides et invalides], fois 31 bits chacun.)

2

Unicode n'est pas un codage, c'est un mappage de caractères. Selon Wikipedia Unicode contient actuellement 109242 caractères distincts.

1
orlp

Unicode a la quantité hexadécimale de 110000, qui est 1114112

0
Dmitry Pleshkov