Si l'UTF-8 est un 8 bits de codage, pourquoi est-il besoin de 1 à 4 octets?
L'Unicode site il est écrit que l'UTF-8 peut être représenté par 1 à 4 octets. Ce que je comprends de cette question https://softwareengineering.stackexchange.com/questions/77758/why-are-there-multiple-unicode-encodings UTF-8 est un 8-bits de codage.
Alors, quelle est la vérité?
Si c'est 8-bits de codage, alors quelle est la différence entre ASCII et UTF-8?
Si elle ne l'est pas, alors pourquoi est-il appelé UTF-8 et pourquoi avons-nous besoin de l'UTF-16 et d'autres si elles occupent la même mémoire?
OriginalL'auteur Sergey | 2011-06-14
Vous devez vous connecter pour publier un commentaire.
Le Minimum Absolu que Tout Développeur Doit Absolument, Positivement Savoir Sur Unicode et les Jeux de Caractères (Pas d'Excuses!) par Joel Spolsky - mercredi, 08 octobre 2003
Extrait à partir de ci-dessus:
Notez que la phrase citée Seuls les points de code 128 et ci-dessus sont stockées à l'aide de 2, 3, en fait, jusqu'à 6 octets n'est plus correcte. Depuis cette pièce a été écrite, Unicode a établi une limite supérieure tel que UTF-8 a besoin seulement de 1 à 4 octets (et jamais 5 ou 6 octets). Qui n'a pas une grande incidence sur les principaux axes de Joël article. La plupart des gens n'ont pas à traiter avec l'encodage UTF-7. UCS-2 est obsolète, une relique de jours lors de l'Unicode a été limitée à 16 bits de code de points; UTF-16 gère la plus moderne, plus grand (U+0000 .. U+10FFFF). UCS-4 est un synonyme pour l'UTF-32. Dans l'ensemble, l'utilisation de l'UTF nom et de ne pas UCS.
OriginalL'auteur Sparky
Le "8-bits d'encodage" signifie que l'individu octets de l'encodage sur 8 bits. En revanche, pur ASCII est un codage sur 7 bits comme il n'a que des points de code de 0 à 127. Il a utilisé pour être que les logiciels qui ont eu des problèmes avec 8 bits codages; l'une des raisons pour Base 64 et uuencode codages était d'obtenir des données binaires par le biais de systèmes de courrier électronique qui n'a pas de poignée 8 bits encodages. Cependant, il a été une décennie ou plus depuis qui a cessé d'être admissible en tant que problème de logiciel qui a dû être propres en 8 bits, ou capable de gérer 8 bits encodages.
Unicode est de 21 bits jeu de caractères. Il y a un certain nombre de codages pour elle:
"UTF-8 peut être représenté par 1 à 4 octets" n'est probablement pas le moyen le plus approprié de la phraséologie. "Des points de code Unicode peut être représenté par 1 à 4 octets en UTF-8" serait plus approprié.
Unicode a 1,114,112 codepoints que de la dernière version. Vous auriez besoin d'21 bits au minimum à indiquer tous les codepoints.
Cela signifie, Sergey brin, que la validité des points de code Unicode sont tous dans la plage U+0000 à U+10FFFF, et que U+10FFFF exige seulement 21 bits pour le représenter. La gamme est également choisie de sorte que les points de code Unicode peuvent être codées par deux mères porteuses (un substitut faible et un haut de substitution) en UTF-16. Si la gamme a été élargie, ce ne serait plus possible. Vous finirez par apprendre à faire la distinction entre les points de code (U+wxyz valeurs) et les diverses façons dont ils peuvent être codées, comme UTF-8, UTF-16 et UTF-32.
+1 pour le "plus approprié" chemin de la phraséologie.
Vineet est correct, mais @Sergey a un point. La caractérisation de l'Unicode comme "un de 21 bits de caractères" est potentiellement source de confusion dans le contexte de cette question. Unicode a 17 avions; chaque plan est de 65 536 points de code, ce qui donne un total de 1,114,112. Pour représenter ce total en binaire (en base 2, plutôt qu'en base 10), vous avez besoin de 21 chiffres (bits). Qui est, le nombre binaire 111111111111111111111 (21 bits), représenté en décimal, est 2,097,151 (2 à la puissance 21, moins 1), qui est plus grand que 1,114,112. 20 bits (de 1 048 575) n'est pas assez. Dans cette mesure, l'Unicode est un "21 bits de caractères".
OriginalL'auteur Jonathan Leffler
UTF-8 est un 8 bits largeur variable encodage. Les 128 premiers caractères de l'Unicode, représenté avec l'encodage UTF-8 a la représentation que les caractères de l'ASCII.
Pour comprendre cette autre, traite les caractères Unicode comme codepoints - un simple nombre qui peut être représenté de plusieurs manières (les codages). UTF-8 est un exemple de codage. Il est le plus couramment utilisé, pour qu'il donne le meilleur de la consommation d'espace des caractéristiques parmi tous les encodages. Si vous stockez des caractères du jeu de caractères ASCII dans l'encodage UTF-8, puis UTF-8 données va prendre la même quantité d'espace. Cette autorisée pour les applications précédemment utilisé ASCII pour déplacer de manière transparente (enfin, pas tout à fait, mais il n'a certainement pas le résultat de quelque chose comme Y2K) en Unicode, pour le caractère des représentations sont les mêmes.
Je vais laisser cet extrait ici de RFC 3629, sur la façon dont le codage UTF-8 devrait fonctionner:
Vous remarquerez pourquoi l'encodage caractères occupant n'importe où entre 1 et 4 octets (la colonne de droite) pour différentes gammes de caractères Unicode (la colonne de gauche).
UTF-16, UTF-32, UCS-2, etc. va employer différents systèmes de codage où la codepoints aurait représenté que 16-bits ou 32-bits codes, au lieu de 8 bits codes UTF-8.
OriginalL'auteur Vineet Reynolds