Combien de caractères peut-on mapper avec Unicode?
je demande le compte de toutes les combinaisons valides possibles en Unicode avec explication. Je sais qu'un char peut être encodé en 1,2,3 ou 4 octets. Je ne comprends pas non plus pourquoi les octets de continuation ont des restrictions même si le fait de commencer par un octet de ce char permet d'effacer combien de temps cela devrait durer.
6 réponses
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 noncharactères
noter que UTF-8 et UTF-32 pourraient théoriquement encoder beaucoup plus que 17 plans, mais la portée est restreinte basée sur les limites de L'encodage UTF-16 .
109,384 les points de code sont en fait attribués dans Unicode 6.0 .
Je ne comprends pas non plus pourquoi les octets de continuation ont des restrictions même si le fait de commencer par un octet de ce char permet de déterminer combien de temps il devrait être.
le but de cette restriction dans UTF-8 est de rendre le codage auto-synchronisant .
Pour un contre-exemple, considérons le codage chinois GB18030. La lettre ß
y est représentée par la séquence de 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 de caractères non conçue pour ce quirk d'encodage spécifique, alors une recherche pour le chiffre 8
trouvera un faux positif dans la lettre ß
.
En UTF-8, cela ne peut pas arriver, parce que le non-chevauchement entre les octets principaux et les octets de piste garantit que l'encodage d'un caractère plus court ne peut jamais se produire dans l'encodage d'un caractère plus long.
Unicode permet de 17 plans , chacune de 65 536 caractères possibles (ou "code de référence"). 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 de l'encodage, mais votre question donne l'impression que vous pensez à UTF-8. La raison des restrictions sur les octets de continuation sont probablement ainsi il est facile pour trouver le début du caractère suivant (comme les caractères de continuation sont toujours de la forme 10xxxxxx, mais l'octet de départ ne peut jamais être de cette forme).
Unicode prend en charge 1.114.112 points de code. Il y a 2048 points de code de substitution, donnant 1112064 valeurs scalaires. Parmi ceux-ci, il y a 66 non-caractères, conduisant à 1.111.1998 caractères encodés possibles (à moins que j'ai fait une erreur de calcul).
pour donner une réponse métaphoriquement exacte, all of them
.
les octets de Continuation dans les encodages UTF-8 permettent la resynchronisation du flux d'octet encodé face au "bruit de ligne". L'encodeur, a simplement besoin d'un scan forward pour un octet qui n'a pas de valeur entre 0x80 et 0xBF pour savoir que le prochain octet est le début d'un nouveau point de caractère.
en théorie, les encodages utilisés aujourd'hui permettent l'expression de caractères dont Caractère Unicode nombre est jusqu'à 31 bits de longueur. En pratique, cet encodage est en fait implémenté sur des services comme Twitter, où la longueur maximale de tweet peut encoder jusqu'à 4 340 bits de données. (140 caractères [valides et invalides], fois 31 bits chacun.)
Unicode n'est pas un codage, est un personnage de la cartographie. Selon Wikipedia Unicode contient actuellement 109242 caractères distincts.
Unicode a le montant hexadécimal de 110000, qui est 1114112