web-dev-qa-db-fra.com

Quelle est la différence entre ASCII et Unicode?

Puis-je connaître la différence exacte entre Unicode et ASCII?

ASCII comporte un total de 128 caractères (256 dans le jeu étendu).

Existe-t-il une spécification de taille pour les caractères Unicode?

353
Ashvitha

ASCII définit 128 caractères, qui correspondent aux nombres 0–127. Unicode définit (inférieur à) 221 caractères qui, de la même manière, correspondent aux nombres 0–221 (Cependant, tous les numéros ne sont pas attribués et certains sont réservés).

Unicode est un sur-ensemble d'ASCII et les nombres de 0 à 127 ont la même signification dans ASCII que dans Unicode. Par exemple, le nombre 65 signifie "capitale latine 'A'".

Comme les caractères Unicode ne tiennent généralement pas dans un octet sur 8 bits, il existe de nombreuses façons de stocker les caractères Unicode dans des séquences d'octets, telles que UTF-32 et UTF-8.

469
Kerrek SB

Comprendre pourquoi ASCII et Unicode ont été créés en premier lieu, m'a aidé à comprendre les différences entre les deux.

ASCII, Origines

Comme indiqué dans les autres réponses, ASCII utilise 7 bits pour représenter un caractère. En utilisant 7 bits, nous pouvons avoir un maximum de 2 ^ 7 (= 128) combinaisons distinctes*. Ce qui signifie que nous pouvons représenter 128 caractères maximum.

Attendez, 7 bits? Mais pourquoi pas 1 octet (8 bits)?

Le dernier bit (8ème) est utilisé pour éviter les erreurs telles que bit de parité . C'était pertinent il y a des années.

La plupart des caractères ASCII sont des caractères imprimables de l'alphabet tels que abc, ABC, 123,? & !, etc. Les autres sont caractères de contrôle tels que retour chariot, saut de ligne) , onglet, etc.

Voir ci-dessous la représentation binaire de quelques caractères en ASCII:

0100101 -> % (Percent Sign - 37)
1000001 -> A (Capital letter A - 65)
1000010 -> B (Capital letter B - 66)
1000011 -> C (Capital letter C - 67)
0001101 -> Carriage Return (13)

Voir le tableau ASCII complet par ici .

ASCII était destiné à l'anglais seulement.

Quoi? Pourquoi l'anglais seulement? Tant de langues dehors!

Parce que le centre de l'industrie informatique était aux États-Unis à cette époque. En conséquence, ils n'ont pas besoin de supporter les accents ou autres marques telles que á, ü, ç, ñ, etc. (aka diacritiques ).

ASCII étendu

Certaines personnes intelligentes ont commencé à utiliser le huitième bit (le bit utilisé pour la parité) pour coder plus de caractères afin de prendre en charge leur langue (pour prendre en charge "é", en français par exemple). L'utilisation d'un bit supplémentaire a doublé la taille de la table d'origine ASCII pour mapper jusqu'à 256 caractères (2 ^ 8 = 256 caractères). Et pas 2 ^ 7 comme avant (128).

10000010 -> é (e with acute accent - 130)
10100000 -> á (a with acute accent - 160)

Le nom de cet "ASCII étendu à 8 bits et non 7 bits comme avant" pourrait simplement être appelé "ASCII étendu" ou "ASCII à 8 bits".

Comme @ Tom a souligné dans son commentaire ci-dessous, il n’existe pas de " ASCII étend ", c’est pourtant un moyen facile de se référer à cette astuce de 8ème bit. Il existe de nombreuses variantes de la table ASCII 8 bits, par exemple, ISO 8859-1, également appelé ISO Latin-1 .

Unicode, la montée

ASCII Extended résout le problème des langues basées sur l’alphabet latin ... qu’en est-il des autres qui ont besoin d’un alphabet complètement différent? Grec? Russe? Chinois et les goûts?

Nous aurions eu besoin d'un tout nouveau jeu de caractères ... c'est la raison d'être de Unicode. Unicode ne contient pas tous les caractères de toutes les langues, mais il contient certainement une quantité gigantesque de caractères ( voir ce tablea ).

Vous ne pouvez pas enregistrer du texte sur votre disque dur en tant que "Unicode". Unicode est une représentation abstraite du texte. Vous devez "encoder" cette représentation abstraite. C'est là qu'un encodage entre en jeu.

Codages: UTF-8 vs UTF-16 vs UTF-32

Cette réponse fait un très bon travail pour expliquer les bases:

  • UTF-8 et UTF-16 sont des codages à longueur variable.
  • En UTF-8, un caractère peut occuper un minimum de 8 bits.
  • En UTF-16, une longueur de caractère commence par 16 bits.
  • UTF-32 est un codage de longueur fixe de 32 bits.

UTF-8 utilise le paramètre ASCII pour les 128 premiers caractères. C'est pratique car cela signifie que le texte ASCII est également valide en UTF-8.

Mnémotechnique:

  • UTF - 8 : minimum 8 bits.
  • UTF - 16 : minimum 16 bits.
  • UTF - 32 : minimum et maximum 32 bits.

Remarque:

Pourquoi 2 ^ 7?

C'est évident pour certains, mais au cas où. Nous avons sept emplacements disponibles remplis avec 0 ou 1 ( code binaire ). Chacun peut avoir deux combinaisons. Si nous avons sept places, nous avons 2 * 2 * 2 * 2 * 2 * 2 * 2 = 2 ^ 7 = 128 combinaisons. Considérez ceci comme une serrure à combinaison à sept roues, chaque roue n’ayant que deux chiffres.

Source: Wikipedia , ce blog génial et Mocki où j'ai initialement posté ce résumé.

317
Matt

ASCII a 128 points de code, de 0 à 127. Il peut tenir dans un seul octet de 8 bits, les valeurs 128 à 255 ayant tendance à être utilisées pour les autres caractères. Avec des choix incompatibles, provoquant la catastrophe page de code. Le texte encodé dans une page de code ne peut pas être lu correctement par un programme qui suppose ou devine une autre page de code.

Unicode est venu pour résoudre ce désastre. La version 1 a commencé avec 65536 points de code, généralement codés sur 16 bits. Plus tard étendu dans la version 2 à 1,1 million de points de code. La version actuelle est la 6.3 et utilise 110 187 des 1,1 million de points de code disponibles. Cela ne rentre plus en 16 bits.

Le codage en 16 bits était courant lorsque la v2 est apparue, utilisée par exemple par Microsoft et les systèmes d'exploitation Apple. Et des langages d’exécution comme Java. La spécification v2 a mis au point un moyen de mapper ces 1,1 million de points de code en 16 bits. Un codage appelé UTF-16, un codage de longueur variable dans lequel un point de code peut prendre 2 ou 4 octets. Les points de code v1 d'origine prennent 2 octets, ceux ajoutés 4.

UTF-8 est un autre codage de longueur variable très utilisé dans les systèmes d'exploitation et les outils * nix. Un point de code peut prendre entre 1 et 4 octets, les codes ASCII d'origine prennent 1 octet, le reste en prenant plus. Le seul codage à longueur non variable est UTF-32, prend 4 octets pour un point de code. Pas souvent utilisé car c'est assez inutile. Il y en a d'autres, comme UTF-1 et UTF-7, largement ignorés.

Un problème avec les encodages UTF-16/32 est que l’ordre des octets dépendra de l’endurance de la machine qui a créé le flux de texte. Ajoutez donc au mélange UTF-16BE, UTF-16LE, UTF-32BE et UTF-32LE.

Avoir ces différents choix d'encodage ramène le désastre de la page de code dans une certaine mesure, avec des débats houleux parmi les programmeurs, pour lequel le choix UTF est "le meilleur". Leur association avec les valeurs par défaut du système d'exploitation dessine à peu près les limites. Une contre-mesure est la définition d'une nomenclature, la marque d'ordre d'octet, un point de code spécial (U + FEFF, espace sans largeur) situé au début d'un flux de texte indiquant comment le reste du flux est codé. Il indique à la fois l’encodage UTF et l’endianess et est neutre par rapport à un moteur de rendu de texte. Malheureusement, il est facultatif et de nombreux programmeurs revendiquent le droit de l'omettre, de sorte que les accidents sont encore assez courants.

87
Hans Passant

Java fournit un support pour Unicode, c'est-à-dire qu'il prend en charge tous les alphabets du monde entier. Par conséquent, la taille du caractère dans Java est de 2 octets. Et la plage est 0 à 65535.

enter image description here

29
Siddarth Kanted

ASCII et Unicode sont des codages à deux caractères. Fondamentalement, ce sont des normes sur la manière de représenter les caractères de différence en binaire afin qu’ils puissent être écrits, stockés, transmis et lus sur des supports numériques. La principale différence entre les deux réside dans la manière dont ils codent le caractère et le nombre de bits qu'ils utilisent pour chacun. ASCII utilisait à l'origine sept bits pour coder chaque caractère. Ce nombre a ensuite été porté à huit avec Extended ASCII pour remédier à l'insuffisance apparente de l'original. En revanche, Unicode utilise un programme de codage à bits variables dans lequel vous pouvez choisir entre des codages 32, 16 et 8 bits. L'utilisation de plus de bits vous permet d'utiliser plus de caractères au détriment des fichiers plus volumineux, tandis que moins de bits vous donne un choix limité mais vous économisez beaucoup d'espace. Utiliser moins de bits (UTF-8 ou ASCII) serait probablement préférable si vous codez un document volumineux en anglais.

L'une des principales raisons pour lesquelles Unicode était le problème provenait des nombreux programmes étendus non standard ASCII. Sauf si vous utilisez la page courante, utilisée par Microsoft et la plupart des autres éditeurs de logiciels, il est probable que vous rencontriez des problèmes d'affichage de caractères avec des caractères. Unicode élimine pratiquement ce problème car tous les points de code de caractères ont été normalisés.

Un autre avantage majeur de l’Unicode est qu’à son maximum, il peut accueillir un grand nombre de caractères. Pour cette raison, Unicode contient actuellement la plupart des langues écrites et a encore de la place pour encore plus. Cela inclut des scripts typiques de gauche à droite comme l'anglais et même de droite à gauche comme l'arabe. Le chinois, le japonais et les nombreuses autres variantes sont également représentés dans Unicode. Donc, l’Unicode ne sera pas bientôt remplacé.

Afin de maintenir la compatibilité avec l'ancien ASCII, qui était déjà largement utilisé à l'époque, Unicode a été conçu de manière à ce que les huit premiers bits correspondent à ceux de la page ASCII la plus populaire. Ainsi, si vous ouvrez un fichier encodé en ASCII avec Unicode, vous obtiendrez tout de même les bons caractères encodés dans le fichier. Cela a facilité l’adoption de l’Unicode, car il a atténué l’impact d’une nouvelle norme de codage pour ceux qui utilisaient déjà l’ASCII.

Sommaire:

1.ASCII uses an 8-bit encoding while Unicode uses a variable bit encoding.
2.Unicode is standardized while ASCII isn’t.
3.Unicode represents most written languages in the world while ASCII does not.
4.ASCII has its equivalent within Unicode.

Depuis: http://www.differencebetween.net/technology/software-technology/difference-between-unicode-and-ascii/#ixzz4zEjnxPhs

12
Nikhil Katre

ASCII comporte 128 positions de code, allouées aux caractères graphiques et aux caractères de contrôle (codes de contrôle).

Unicode a 1 114 112 positions de code. Environ 100 000 d’entre eux sont actuellement affectés à des caractères, et de nombreux points de code ont été définitivement définis comme des non-caractères (c’est-à-dire qu’ils ne sont jamais utilisés pour coder aucun caractère) et la plupart des points de code ne sont pas encore attribués.

Les seules choses que ASCII et Unicode ont en commun sont: 1) Ce sont des codes de caractères. 2) Les 128 premiers codes de Unicode ont la même signification qu'en ASCII, à ceci près que les codes de ASCII caractères de contrôle sont simplement définis comme désignant des caractères de contrôle, avec des noms correspondant à leurs ASCII noms, mais leur signification n'est pas définie en Unicode.

Parfois, cependant, Unicode est caractérisé (même dans le standard Unicode!) Comme "Wide ASCII". C’est un slogan qui tente principalement de véhiculer l’idée selon laquelle Unicode est censé être un code de caractère niversel de la même manière que ASCII (bien que le répertoire de caractères de ASCII était désespérément insuffisant pour une utilisation universelle), contrairement à l'utilisation de codes différents dans différents systèmes et applications et pour différentes langues.

Unicode en tant que tel ne définit que la "taille logique" des caractères: chaque caractère a un numéro de code dans une plage spécifique. Ces numéros de code peuvent être présentés à l'aide de différents codages de transfert. En mémoire, les caractères Unicode sont généralement représentés en utilisant une ou deux quantités de 16 bits par caractère, en fonction de la plage de caractères, parfois en utilisant une quantité de 32 bits par caractère.

11
Jukka K. Korpela

ASCII définit 128 caractères, car Unicode contient un répertoire de plus de 120 000 caractères.

0
sphynx888