Quelle est la différence entre UTF-8 et l'Unicode?
J'ai entendu des opinions divergentes des personnes - selon la Wikipédia UTF-8 page.
Ils sont la même chose, n'est-ce pas? Quelqu'un peut-il préciser?
- Ce WIKI a écrit au sujet de l'unicode et la UTFs est ok à mon avis. Quelques commentaires sur il sont bizarre: "Il est possible en UTF-8 (ou tout autre encodage multi-octet) de séparer ou de tronquer une chaîne de caractères au moyen d'un personnage, ce qui peut entraîner une chaîne non valide." Si une chaîne de caractères qui obtient codé en UTF-8 n'est pas plus une chaîne, mais un tableau d'octets ou de flux d'octets. Les personnages qui composent la chaîne de caractères codé. Bien sûr, il peut être décodé comme bien. Maintenant, bien sûr, vous pouvez couper un utf-8 séquence après le début octets ou après une suite d'octets, mais pourquoi quelqu'un devrait le faire?
- Cet article sur les types de données chaîne éducative: mortoray.com/2013/11/27/the-string-type-is-broken -- parfois, lorsque vous travaillez avec des chaînes et de leur niveau octet composants, vous pouvez par inadvertance hacher un personnage dans la moitié.
Vous devez vous connecter pour publier un commentaire.
Pour se développer sur les réponses des autres:
Nous avons beaucoup de langues avec beaucoup de personnages que les ordinateurs devraient idéalement d'affichage. Unicode attribue à chaque caractère un numéro unique, ou de point de code.
Ordinateurs de traiter avec ces nombres comme des octets... sauter un peu d'histoire ici, et en ignorant la mémoire de régler les problèmes, 8 bits, ordinateurs traiter un octet de 8 bits comme la plus grande unité numérique facilement représentées sur le matériel, les ordinateurs 16 bits permettrait d'étendre qu'à deux octets, et ainsi de suite.
Anciens codages de caractères comme ASCII sont de la (pré-) ère 8-bit, et d'essayer de fourrer la langue dominante dans le calcul à l'époque, c'est à dire l'anglais, dans les numéros allant de 0 à 127 (7 bits). Avec 26 lettres dans l'alphabet, à la fois en capital et autres qu'en capital de forme, de chiffres et de signes de ponctuation, cela a fonctionné assez bien. ASCII ai prolongé de 8 bits pour les autres, les non-anglais langues, mais le supplément de 128 numéros/points de code mis à disposition par cette expansion devrait être mappé à des caractères différents selon la langue affichée. L'ISO-8859 normes sont les formes les plus courantes de cette cartographie; ISO-8859-1 et ISO-8859-15 (aussi connu comme l'ISO-Latin-1, latin1, et oui il y a deux versions différentes de la ISO 8859 standard ainsi).
Mais cela ne suffit pas lorsque vous souhaitez représenter des personnages de plus d'une langue, donc potasser tous les caractères disponibles dans un seul octet juste ne fonctionnera pas.
Il y a essentiellement deux types de codages: on élargit la gamme de valeur par l'ajout de plus de bits. Des exemples de ces codages serait UCS2 (2 octets = 16 bits) et UCS4 (4 octets = 32 bits). Elles souffrent d'intrinsèquement le même problème que l'ASCII et ISO-8859 normes, comme leur gamme de valeur est encore limitée, même si la limite est largement supérieur.
L'autre type de codage utilise un nombre variable d'octets par caractère, et le plus connu des codages pour ce sont les codages UTF. Tous les codages UTF fonctionnent à peu près de la même manière: vous choisissez une taille d'unité, qui pour l'UTF-8 est 8 bits, pour de l'UTF-16 est de 16 bits, et pour l'UTF-32 est 32 bits. La norme définit alors un peu de ces bits comme les drapeaux: si ils sont définis, puis l'unité suivante dans une séquence d'unités doit être considéré comme faisant partie d'un même caractère. Si ils ne sont pas ensemble, cette unité représente un seul caractère entièrement. Ainsi, les plus courantes (anglais) les personnages n'occupent qu'un octet en UTF-8 (deux en UTF-16, 4 en UTF-32), mais d'autres caractères de la langue peut occuper six octets ou plus.
Multi-octets codages (je devrais dire multi-unité après l'explication ci-dessus) ont l'avantage qu'ils sont relativement économe en espace, mais l'inconvénient que des opérations telles que la recherche de sous-chaînes, des comparaisons, etc. tous ont pour décoder les caractères de points de code unicode avant que de telles opérations peuvent être effectuées (il y a quelques raccourcis, tout de même).
À la fois l'UCS normes et de l'UTF normes de coder les points de code tel que défini dans la norme Unicode. En théorie, les codages pourrait être utilisé pour encoder n'importe quel nombre (dans les limites de l'encodage prend en charge) - mais bien sûr, ces codages ont été réalisés pour coder les points de code Unicode. Et c'est votre relation qui existe entre eux.
Windows traite les soi-disant "Unicode" chaînes de caractères UTF-16 chaînes, alors que la plupart des systèmes Unix par défaut en UTF-8 ces jours-ci. Les protocoles de communication tels que HTTP tendance à travailler mieux avec de l'UTF-8, comme la taille de l'unité en UTF-8 est la même que dans l'ASCII, et la plupart de ces protocoles ont été conçus en ASCII ère. D'autre part, UTF-16 donne le meilleur moyenne de l'espace/les performances de traitement de représentant de toutes les langues vivantes.
Le standard Unicode définit de moins en moins de points de code que ce qui peut être représenté en 32 bits. Ainsi, pour toutes fins pratiques, UTF-32 et UCS4 est devenu le même encodage, que vous êtes peu probable d'avoir à traiter avec multi-unité de caractères en UTF-32.
Espère que remplit dans certains détails.
0x04000000
à0x7FFFFFFF
, ou en binaire, il est1111110v 10vvvvvv 10vvvvvv 10vvvvvv 10vvvvvv 10vvvvvv
- et c'est en effet 6 octets. Cependant, 6 octets EST le maximum, et non pas l'article de prêter à confusion, les revendications "six octets plus"."Unicode" est malheureusement utilisé de différentes manières, selon le contexte. Son plus correct d'utiliser (OMI) est comme un jeu de caractères codés - c'est à dire un ensemble de caractères et une mise en correspondance entre les caractères et entier points de code les représentant.
UTF-8 est un codage de caractères - un chemin de conversion à partir des séquences d'octets à des séquences de caractères et vice versa. Elle couvre l'ensemble du jeu de caractères Unicode. L'ASCII est codé comme un seul octet par caractère, et d'autres personnages prennent plus d'octets selon exact de leur point de code (jusqu'à 4 octets pour l'ensemble défini des points de code, c'est à dire jusqu'à U-0010FFFF, et, de fait 4 octets peut faire face aux U-001FFFFF).
Lorsque "Unicode" est utilisé en tant que nom d'un codage de caractères (par exemple, comme l' .NET L'encodage.Unicode de la propriété), il signifie généralement UTF-16, qui code pour la plupart des caractères communs comme deux octets. Certaines plates-formes (notamment .NET et Java) utiliser l'UTF-16 comme leur "native" l'encodage des caractères. Cela conduit à des poilus de problèmes si vous avez besoin de s'inquiéter à propos des caractères qui ne peuvent pas être codée sur un seul UTF-16 valeur (ils sont codés comme "les paires de substitution") - mais la plupart des développeurs ne vous inquiétez pas à ce sujet, IME.
Quelques références sur Unicode:
utf-x
existe pour les "comment" sur magasin le point de code unicode.....suis-je la corriger?Permettez-moi de prendre un exemple pour illustrer ce sujet:
Rien de magique jusqu'à présent, c'est très simple. Maintenant, disons que vous décidez de stocker ce personnage sur notre disque dur. Pour ce faire, nous avons besoin de stocker les caractères dans le format binaire. Il suffit de l'enregistrer comme est "01101100 01001001'. Fait!
Mais attendez une minute, est "01101100 01001001' un personnage ou deux personnages? Vous saviez que c'est un personnage parce que je vous l'ai dit, mais quand un ordinateur, il lit, il n'a aucune idée. Donc nous avons besoin d'une sorte de "encodage" pour raconter l'ordinateur à la traiter comme une.
C'est là que les règles de 'UTF-8' vient en: http://www.fileformat.info/info/unicode/utf8.htm
Selon le tableau ci-dessus, si nous voulons stocker ce personnage à l'aide de la 'UTF-8' format, nous avons besoin de préfixe de notre caractère, avec une certaine "en-têtes". Notre caractère chinois est de 16 bits de long (compter la valeur binaire vous-même), on va donc utiliser le format sur la ligne 3, car il fournit assez d'espace:
Écrit le résultat dans une seule ligne:
C'est de l'UTF-8 (binaire) de la valeur du caractère chinois! (confirmer vous-même: http://www.fileformat.info/info/unicode/char/6c49/index.htm)
Résumé
P. S. Si vous voulez apprendre cette rubrique en python, cliquez ici
0
puis le personnage est représenté par 1 morsure (l'actuel), si l'octet commence par110
puis le personnage est représenté par 2 octets(l'actuel et le suivant(les bits restants après10
)), si l'octet commence par1110
puis le personnage est représenté par 3 octets, l'actuelle et la prochaine 2 octets(bits restants après10
).Ils ne sont pas la même chose - UTF-8 est une façon particulière de codage Unicode.
Il ya beaucoup de différents encodages vous pouvez choisir en fonction de votre application et les données que vous souhaitez utiliser. Les plus courants sont en UTF-8, UTF-16 et UTF-32 s ce que je sais.
Unicode définit seulement points de code, c'est un nombre qui représente un personnage. La façon dont vous stockez ces points de code dans la mémoire dépend de la encodage que vous utilisez. UTF-8 est un moyen de codage de caractères Unicode, parmi beaucoup d'autres.
Unicode est une norme qui définit, avec la norme ISO/CEI 10646, Universal Character Set (UCS) qui est un sur-ensemble de tous les caractères nécessaires pour représenter presque toutes les langues connues.
Unicode attribue un Nom et un Numéro (Code de Caractère, ou de Point de Code) à chaque personnage dans son répertoire.
L'encodage UTF-8, est une manière de représenter ces caractères sous forme numérique dans la mémoire de l'ordinateur. UTF-8 cartes de chaque point de code en une séquence d'octets (8 bits octets)
Pour, par exemple,
UCS Caractère = Unicode Han Caractère
Code UCS-point = U+24B62
L'encodage UTF-8 = F0 A4 AD A2 (hex) = 11110000 10100100 10101101 10100010 (bin)
http://www.wikiwand.com/en/UTF-8#/Description
Ont un coup d'oeil à la première ligne.Unicode est juste une norme qui définit un jeu de caractères (UCS) et les codages (UTF) pour coder ce jeu de caractères. Mais en général, l'Unicode est appelé le jeu de caractères et non pas la norme.
Lire Le Minimum Absolu que Tout Développeur Doit Absolument, Positivement Savoir Sur Unicode et les Jeux de Caractères (Pas d'Excuses!) et Unicode Dans Les 5 Minutes.
Les questions /réponses déjà expliquer beaucoup de détails, mais en voici une très courte réponse avec la plus directe explication et exemple.
Unicode est la standard que les cartes de personnages à codepoints.
Chaque personnage a un codepoint unique (numéro d'identification), qui est un nombre comme 9731.
UTF-8 est un
lencodage de la codepoints.Afin de stocker tous les personnages sur le disque (dans un fichier), UTF-8 divise personnages jusqu'à 4 octets (8 bits séquences) - octets.
UTF-8 est l'un de plusieurs codages (méthodes de représentation des données). Par exemple, dans Unicode, l' (décimal) codepoint 9731 représente un bonhomme de neige (
☃
), qui se compose de 3 octets en UTF-8:E2 98 83
Voici un liste triée avec quelques exemples aléatoires.
1. Unicode
Il y a beaucoup de personnages à travers le monde,comme "$,&,h,a,t,?,张,1,=,+...".
Ensuite, il vient d'une organisation qui a pour objectif de ces personnages,
Ils ont fait une norme appelée "Unicode".
La norme est comme suit:
PS:bien sûr, il y a une autre organisation appelée ISO maintien d'une autre norme --"ISO 10646",près de la même.
2. UTF-8
Comme ci-dessus,U+0024 est juste une position,de sorte que nous ne pouvons pas sauver "U+0024" dans l'ordinateur pour le caractère "$".
Il doit y avoir une méthode de codage.
Puis, il est des méthodes de codage,comme UTF-8,UTF-16,UTF-32,UCS-2....
En vertu de l'UTF-8,le point de code U+0024" est codé en 00100100.
00100100 est la valeur que nous enregistrer dans l'ordinateur pour "$".
J'ai vérifié les liens dans Gumbo réponse, et j'ai voulu coller une partie de ces choses là existent sur Pile Overflow ainsi.
"...Peu de gens sont sous la fausse idée qu'Unicode est simplement un code de 16 bits où chaque personnage prend de 16 bits et donc il y a 65536 caractères possibles. Ce n'est pas, en fait, de les corriger. C'est le mythe le plus commun sur Unicode, donc si vous avez pensé que, ne vous sentez pas mal.
En fait, Unicode a une autre façon de penser sur les personnages, et vous devez comprendre l'Unicode façon de penser à des choses ou rien du sens.
Jusqu'à présent, nous avons supposé qu'une lettre de cartes des bits que vous pouvez stocker sur disque ou en mémoire:
A -> 0100 0001
En Unicode, une lettre correspond à quelque chose appelé un point de code qui n'est qu'un concept théorique. Comment ce point de code est représenté en mémoire ou sur le disque est une toute autre histoire..."
"...Toute platonique lettre dans chaque alphabet est attribué un nombre magique par le consortium Unicode qui est écrit comme ceci: U+0639. Ce nombre magique est appelé un point de code. Le U+ signifie "Unicode", et les chiffres sont en hexadécimal. U+0639 est la lettre arabe Ain. La lettre anglaise A, U+0041...."
"...OK, alors disons que nous avons une chaîne de caractères:
Bonjour
qui, en Unicode, correspond à cinq points de code:
U+0048 U+0065 U+006C U+006C U+006F.
Tout un tas de points de code. Numéros, vraiment. Nous n'avons pas encore dit rien sur la façon de les stocker dans la mémoire ou de la représenter dans un message e-mail..."
"...C'est là que les encodages sont en.
La première idée pour l'encodage Unicode, ce qui a conduit au mythe des deux octets, était, hey, nous allons stocker ces nombres dans deux octets chacun. Donc Bonjour devient
00 48 00 65 00 6C 00 6C 00 6F
Droit? Pas si vite! Ne pourrait-elle pas être:
48 00 65 00 6C 00 6C 00 6F 00 ? ..."
Unicode est une vaste étendue de la norme qui définit de plus de 130 000 caractères et attribue à chacun un code numérique ("codepoint"). Il définit également les règles de tri de ce texte, le normaliser, de changer son cas, et plus encore. Un caractère Unicode est représenté par un point de code à partir de zéro jusqu'à 0x10FFFF inclusive, même si certains points de code sont réservés et ne peuvent pas être utilisés pour les personnages.
Les codes Unicode peut être représentée dans plus d'un encodage. Le plus simple est de l'UTF-32, qui, tout simplement, encode le point de code en tant que nombres entiers de 32 bits, chacune de 4 octets.
UTF-8 est un autre codage, et en train de devenir rapidement le standard de facto. Il code pour une séquence de valeurs d'octets. Chaque code peut utiliser un nombre variable de ces octets. Les points de Code dans la plage ASCII sont codés à nu, pour être compatible avec l'ASCII. Les points de Code en dehors de cette gamme, l'emploi d'un nombre variable d'octets, soit 2, 3, ou 4, en fonction de la portée, ils sont.
UTF-8 a été conçu avec ces propriétés à l'esprit:
Les caractères ASCII sont codés de la même manière qu'ils sont en ASCII, tels qu'une chaîne de caractères ASCII est également valable en tant que UTF-8.
Binaire de tri: le Tri des chaînes UTF-8 à l'aide d'un naïf de tri binaire sera toujours dans tous les points de code triés dans l'ordre numérique.
Les caractères en dehors de la plage ASCII ne pas utiliser tous les octets de la plage ASCII, en s'assurant qu'ils ne peuvent pas être confondu avec les caractères ASCII. C'est également une fonctionnalité de sécurité.
UTF-8 peut facilement être validé, et de les distinguer des autres codages de caractères par un validateur. Texte dans d'autres 8 bits ou multi-octets codages très rarement également de valider en tant que UTF-8.
Accès aléatoire: en tout point de la chaîne UTF-8, il est possible de dire si l'octet à cette position est le premier octet d'un caractère ou non, et pour revenir au début de ce personnage, sans avoir besoin de se référer à quoi que ce soit au début de la chaîne.
Non, ils ne sont pas.
Je pense que la première phrase de l' Page Wikipedia vous avez référencé donne une belle, bref résumé:
D'élaborer:
Unicode est une norme qui définit un carte des personnages numéros, le soi-disant points de code, (comme dans l'exemple ci-dessous). Pour l'une cartographie complète, vous pouvez avoir un coup d'oeil ici.
UTF-8 est l'un des moyens pour coder ces points de code dans une forme un ordinateur peut comprendre, aka bits. En d'autres termes, c'est un moyen/de l'algorithme pour convertir chacun de ces points de code pour une séquence de bits ou de convertir une séquence de bits de l'équivalent de points de code. Notez qu'il existe beaucoup de variante encodage Unicode.
Joel donne une très bonne explication et un aperçu de l'histoire ici.
UTF-8 est une méthode de codage de caractères Unicode à l'aide de 8 séquences de bits.
Unicode est un standard pour la représentation d'une grande variété de caractères à partir de plusieurs langues.
Si je peux résumer ce que j'ai recueillies à partir de ce fil:
Unicode 'traduit' caractères pour les nombres ordinaux (sous forme décimale).
UTF-8 est un encodage 'traduit' de ces chiffres binaires représentations.