Quelle est la différence entre Unicode et UTF-8? [dupliquer]

cette question a déjà une réponse ici:

prendre en considération:

Alt text

Est-il vrai que unicode=utf16 ?

beaucoup sont dire Unicode est un standard, pas un encodage, mais la plupart des éditeurs soutiennent enregistrer comme Unicode encodage en fait.

148
demandé sur Peter Mortensen 2010-10-17 06:17:02

9 réponses

la plupart des éditeurs prennent en charge l'enregistrement en tant qu'encodage Unicode.

il s'agit d'une maladresse malencontreuse perpétrée par Windows.

étant donné que Windows utilise L'encodage UTF-16LE en interne comme format de mémoire pour les chaînes Unicode, il considère qu'il s'agit de l'encodage naturel du texte Unicode. Dans le monde de Windows, il y a des chaînes ANSI (le codepage du système sur la machine actuelle, sujet à la non-portabilité totale) et il y a des chaînes Unicode (stockées en interne comme UTF-16LE).

tout cela a été conçu dans les premiers jours D'Unicode, avant que nous nous rendions compte que L'UCS-2 n'était pas suffisant, et avant que L'UTF-8 ait été inventé. C'est pourquoi le support de Windows pour UTF-8 est pauvre.

ce schéma de nommage erroné est devenu une partie de l'interface utilisateur. Un éditeur de texte qui utilise le support d'encodage de Windows pour fournir une gamme d'encodages décrira automatiquement et de manière inappropriée UTF-16LE comme "Unicode", et UTF-16BE, si fourni, comme"Unicode big-endian".

(D'autres éditeurs qui s'encodent eux-mêmes, comme le bloc-notes++, n'ont pas ce problème.)

si cela peut vous rassurer, les chaînes ‘ANSI’ ne sont pas non plus basées sur une norme ANSI.

137
répondu bobince 2012-10-12 23:38:43

comme le dit Rasmus dans son article " la différence entre UTF-8 et Unicode?" (lien corrigé):

si on pose la question, " Quelle est la différence entre UTF-8 et Unicode?", voulez-vous répondre avec confiance avec un court et précis réponse? Dans ces jours d'internationalisation tous les développeurs devraient être en mesure de le faire. Je pense que beaucoup d'entre nous ne comprennent pas ces concepts. comme nous le devrions. Si vous sentez que vous appartiennent à ce groupe, vous devez lisez cette très courte introduction aux jeux de caractères et aux encodages.

en fait, comparer UTF-8 et Unicode c'est comme comparer des pommes et oranges:

UTF-8 est un encodage-Unicode est un caractère jeu

Un jeu de caractères est une liste de caractères avec des numéros uniques (ces les chiffres sont parfois appelés "points de code"). Par exemple, dans Unicode jeu de caractères, le numéro de A est 41.

Un encodage d'autre part, est un algorithme qui se traduit par une liste des nombres à binaire afin qu'il puisse être stocké sur le disque. Exemple UTF-8 traduirait la séquence de nombres 1, 2, 3, 4 comme ceci:

00000001 00000010 00000011 00000100 

nos données sont maintenant traduites en binaire et peuvent être sauvées à disque.

tous ensemble maintenant

Disons qu'une application lit ce qui suit du disque:

1101000 1100101 1101100 1101100 1101111 

l'application sait que ces données représentent une chaîne Unicode encodée avec UTF-8 et doit l'afficher sous forme de texte à l'utilisateur. Première étape, est de convertir les données binaires en nombres. L'application utilise L'algorithme UTF-8 pour décoder les données. Dans ce cas, le décodeur renvoie ceci:

104 101 108 108 111 

depuis l'application sait qu'il s'agit d'une chaîne Unicode, il peut supposer chaque nombre représente une caractère. Nous utilisons le jeu de caractères Unicode traduisez chaque nombre à un caractère correspondant. Le résultant la chaîne est "bonjour".

Conclusion

donc quand quelqu'un vous demande "Quelle est la différence entre UTF-8 et Unicode?", vous pouvez maintenant répondre en toute confiance courte et précise:

UTF-8 et Unicode ne peuvent pas être comparés. UTF-8 est un encodage utilisé pour traduire des nombres en données binaires. Unicode est un jeu de caractères utilisé pour convertir les caractères en nombres.

473
répondu vikas devde 2016-10-21 02:25:12

ce n'est pas si simple.

UTF-16 est un encodage 16 bits, de largeur variable. Le simple fait d'appeler quelque chose "Unicode" est ambigu, puisque "Unicode" fait référence à un ensemble complet de normes pour l'encodage des caractères. Unicode est pas un encodage!

http://en.wikipedia.org/wiki/Unicode#Unicode_Transformation_Format_and_Universal_Character_Set

et bien sûr, L'obligatoire Joel sur le Logiciel - le Minimum absolu chaque développeur de logiciel absolument, positivement doit savoir sur Unicode et les jeux de caractères (pas D'Excuses!) lien.

26
répondu Matt Ball 2010-10-17 02:28:45

il y a beaucoup de malentendus ici. Unicode n'est pas un encodage, mais le standard Unicode est consacré principalement à l'encodage de toute façon.

ISO 10646 est le jeu de caractères international qui vous intéresse (probablement). Il définit une correspondance entre un ensemble de caractères nommés (par exemple, "lettre majuscule latine A" ou "lettre minuscule grecque alpha") et un ensemble de points de code (un nombre attribué à chacun -- par exemple, 61 hexadécimal et 3B1 hexadécimal pour ces deux points respectivement; pour les points de code Unicode, la notation standard serait U+0061 et U+03B1).

autrefois, Unicode définissait son propre jeu de caractères, plus ou moins en concurrence avec la norme ISO 10646. C'était un jeu de caractères de 16 bits, mais il était pas UTF-16; Il était connu sous le nom de UCS-2. Il a inclus une technique assez controversée pour essayer de garder le nombre de caractères nécessaires à un minimum (Unification Han -- essentiellement traiter Chinois, Des personnages japonais et coréens qui se ressemblaient un peu comme étant le même personnage).

depuis lors, le consortium Unicode a tacitement admis que cela n'allait pas marcher, et maintenant se concentrer principalement sur les moyens d'encoder le jeu de caractères ISO 10646. Les principales méthodes sont UTF-8, UTF-16 et UCS-4 (alias UTF-32). Ceux-ci (à L'exception de L'UTF-8) ont aussi des variantes LE (little endian) et BE (big-endian).

par lui-même, "Unicode" pourrait se référer à presque tout ce qui précède (bien que nous puissions probablement éliminer les autres qu'il montre explicitement, comme UTF-8). L'utilisation sans réserve de "Unicode" se produit probablement le plus souvent sur Windows, où il sera presque certainement se référer à UTF-16. Les premières versions de Windows NT ont adopté Unicode lorsque L'UCS-2 était à jour. APRÈS QUE L'UCS-2 a été déclaré obsolète (autour de Win2k, si la mémoire sert), ils sont passés à UTF-16, qui est le plus similaire à L'UCS-2 (en fait, il est identique pour les caractères dans le " plan de base multilingue", qui couvre beaucoup, y compris tous les caractères pour la plupart des langues D'Europe occidentale).

14
répondu Jerry Coffin 2010-10-17 03:05:48

UTF-16 et UTF-8 sont des encodages Unicode. Ils sont les deux Unicode; l'un n'est pas plus Unicode que l'autre.

ne laissez pas un malheureux artefact historique de Microsoft vous embrouiller.

6
répondu Mark Ransom 2010-10-17 03:19:53

le développement D'Unicode a été visé la création d'une nouvelle norme pour la cartographie les caractères dans une grande majorité de les langues qui sont utilisées aujourd'hui, le long de avec d'autres personnages qui sont non pas que l'essentiel, mais peut-être nécessaire pour créer le texte. UTF-8 n'est qu'une des nombreuses façons que vous peut encoder les fichiers car il y a de nombreuses façons vous pouvez encoder le caractères à l'intérieur d'un fichier en Unicode.

Source:

http://www.differencebetween.net/technology/difference-between-unicode-and-utf-8 /

3
répondu Trufa 2010-10-17 02:19:47

en plus du commentaire de Trufa, Unicode n'est explicitement pas UTF-16. Quand ils ont commencé à regarder dans Unicode, il a été spéculé qu'un entier de 16 bits pourrait être suffisant pour stocker n'importe quel code, mais dans la pratique qui s'est avéré ne pas être le cas. Cependant, UTF-16 est un autre encodage valide D'Unicode-à côté des variantes 8-bit et 32-bit - et je crois que C'est l'encodage que Microsoft utilise en mémoire à l'exécution sur les systèmes D'exploitation dérivés NT.

3
répondu Tommy 2017-01-04 18:23:50

commençons par garder à l'esprit que les données sont stockées en octets; Unicode est un jeu de caractères où les caractères sont mappés en points de code (entiers uniques), et nous avons besoin de quelque chose pour traduire ces données de points de code en octets. C'est là que L'UTF-8 entre en jeu dans ce qu'on appelle l'encodage – simple!

2
répondu mrehan 2017-01-04 18:27:13

c'est bizarre. Unicode est un standard, pas un encodage. Comme il est possible de spécifier l'endianness je suppose que c'est effectivement UTF-16 ou peut-être 32.

D'où vient ce menu?

1
répondu MatTheCat 2017-01-04 18:23:08