10
votes

Pourquoi le symbole de diplôme diffère de UTF-8 de Unicode?

Pourquoi le symbole de diplôme diffère de UTF-8 de Unicode?

Selon: http://www.utf8-chartable.de/ et http://www.fileformat.info/info/unicode/char/ B0 / Index.htm

Unicode est B0 mais utf-8 est C2 B0 Comment se fait-il! ??


3 commentaires

Il existe des milliers de caractères dont la représentation diffère entre UTF-8 et UTF-16. Qu'est-ce qui vous fait croire que le symbole de degré mérite un traitement spécial?


Vous devez comprendre la différence entre Unicode et ses différents codages. Lisez les liens que les gens ont affiché.


@Mikenakis: Je crois que Tous Les points de code Unicode ont des représentations différentes dans UTF-8 et UTF-16.


4 Réponses :


25
votes

utf-8 est un moyen d'encoder des caractères UTF à l'aide de nombre variable d'octets (le nombre d'octets dépend du point de code).

Points de code entre U + 0080 et U + 07FF Utilisez les 2 octets suivants < un href = "http://fr.wikipedia.org/wiki/utf-8#design"> coding : xxx

x < / Code> représente les bits du point de code codé.

considérons u + 00b0. En binaire, 0xb0 est 10110000. Si l'on substitue les bits dans le modèle ci-dessus, on obtient: xxx

dans hex, ceci est 0xc2 0xb0.


5 commentaires

Et, cruciale, c'est simplement une représentation différente du même point de code Unicode, U + 00b0. UTF-16 utilise 0x00 0xb0 (Big-Endian) ou 0xB0 0x00 (Little-Endian), mais UTF-8 utilise 0XC2 0xB0 (pas d'endian-ness).


Le lien que vous fournissez est très utile ... merci


@Jonathanleffler "Pas d'Endian-Ness" Pas une terminologie appropriée mais drôle


@Userthatisnotausere c'est la terminologie appropriée. en.wikipedia.org/wiki/endianness


@Clake Désolé, je faisais référence à la placement étrange du tiret. Certainement d'accord! 🤦🏻♂️



5
votes

Unicode (UTF-16 et UTF-32) utilise le point de code 0x00b0 pour ce caractère. Utf-8 n'autorise pas les caractères à des valeurs supérieures à 127 ( 0x007f ), car le bit élevé de chaque octet est réservé pour indiquer que ce caractère particulier est en fait un multi-octet.

Cartes ASCII de base 7 bits directement aux 128 premiers caractères de UTF-8. Tous les caractères dont les valeurs sont supérieures à 127 décimales (7F Hex) doivent être "échappées" en réglant le bit élevé et en ajoutant 1 octets supplémentaires ou plus à décrire.


0 commentaires

6
votes

utf-8 est un encodage de Unicode. UTF-16 et UTF-32 sont d'autres codages d'UNICODE.

Unicode définit une valeur numérique pour chaque caractère; Le symbole degré se trouve être 0xB0, ou 176 en décimal. Unicode ne définit pas la manière dont ces valeurs numériques sont représentées.

utf-8 code la valeur 0xb0 comme deux octets consécutifs (octets) avec des valeurs 0xc2 0xb0 . .

utf-16 code la même valeur que 0x00 0xb0 ou comme 0xbo 0x00 , en fonction de l'endiangité.

utf-32 encode comme 0x00 0x00 0x00 0xb0 ou comme 0xb0 0x00 0x00 0x00 , en fonction de l'endansalité (je suppose que d'autres commandes sont possibles).


0 commentaires

1
votes

Les réponses de NPE, Marc et Keith sont bonnes et au-dessus de mes connaissances sur ce sujet. Je devais toujours les lire plusieurs fois avant de réaliser ce que c'était à propos. Ensuite, j'ai vu cette page Web qui l'a fait "cliquer" pour moi.

chez http://www.utf8-chartable.de/ , vous pouvez voir le Suivant:

utf-8 a besoin C2 80 pour représenter U + 0080

remarquez comment il est nécessaire d'utiliser deux octets pour coder un personnage. Maintenant, lisez la réponse acceptée de la NPE.


1 commentaires

Si un utilisateur ne peut pas voir le site Web, il affiche 0x7f (Supprimer) comme UTF-8: 7f et 0x80 comme UTF-8: c2 80