Quelle est la différence entre ASCII et Unicode?

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

ASCII a un total de 128 caractères (256 dans l'ensemble étendu).

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

292
demandé sur nbro 2013-10-06 22:25:42

7 réponses

ASCII définit 128 caractères, qui correspondent aux nombres 0-127. Unicode définit (moins de) 221 caractères, qui, de même, correspondent à des nombres 0-221 (bien que tous les numéros ne sont pas actuellement attribués, et certains sont réservés).

Unicode est un sur-ensemble D'ASCII, et les nombres 0-128 ont la même signification en ASCII qu'ils ont en Unicode. Par exemple, le nombre 65 signifie "capitale LATINE 'A'".

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

381
répondu Kerrek SB 2017-12-21 12:49:21

Compréhension pourquoi ASCII et Unicode ont été créés en premier lieu m'a aidé à comprendre comment ils travaillent effectivement.

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.

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

Le dernier bit (8) est utilisé pour éviter les erreurs, comme 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 comme retour chariot, saut de ligne, tab, 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 la table ASCII complète ici .

ASCII était destiné pour l'anglais seulement.

Quoi? Pourquoi l'anglais seulement? Donc, beaucoup de langues!

Parce que le centre de l'industrie informatique était aux États-Unis à ce temps. En conséquence, ils n'avaient pas besoin de soutenir les accents ou autres des marques telles que ä, ü, ç, ñ, etc. (alias diacritiques ).

ASCII Étendu

Certaines personnes intelligentes ont commencé à utiliser le 8ème bit (le bit utilisé pour la parité) pour encoder plus de caractères pour supporter Leur langue (pour soutenir "é", en français, par exemple). Juste en utilisant un bit supplémentaire a doublé la taille de la table ASCII d'origine 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 ce "ASCII étendu à 8 bits et non 7 bits comme avant" pourrait être simplement appelé "ASCII étendu" ou "ASCII 8 bits".

Comme @ Tom l'a souligné dans son commentaire ci-dessous, il n'existe pas de "extended ASCII " mais c'est un moyen facile de se référer à ce tour du 8ème bit. Il existe de nombreuses variantes de la table ASCII 8 bits, par exemple, la ISO 8859-1, également appelée ISO Latin-1 .

Unicode, La Hausse

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? Le grec? Le russe? Le chinois et l'aime?

Nous aurions eu besoin d'un jeu de caractères entièrement nouveau... c'est la raison d'être de l'Unicode. Unicode ne le fait pas contient tous les caractères de chaque langue, mais il contient certainement une quantité gigantesque de caractères ( voir ce tableau ).

Vous ne pouvez pas enregistrer le 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'unencodage entre en jeu.

Encodages: UTF-8 vs UTF-16 vs UTF-32

Cette réponse fait un très bon travail pour expliquer le notions de base:

  • UTF-8 et UTF-16 sont des codages de 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 encodage de longueur fixe de 32 bits.

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

Mnémoniques:

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

Remarque:

Pourquoi 2^7?

C'est évident pour certains, mais juste au cas où. Nous avons sept emplacements disponibles remplis avec 0 ou 1 (Code binaire ). Chacun peut avoir deux combinaisons. Si nous avons sept spots, nous avons 2 * 2 * 2 * 2 * 2 * 2 * 2 = 2^7 = 128 les combinaisons. Pensez à cela comme une combinaison serrure avec sept roues, chaque roue ayant deux numéros seulement.

Source: Wikipedia et ce grand blog.

209
répondu andrew 2017-11-19 21:59:21

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

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

Encodage en 16 bits était commun lorsque V2 est venu autour, utilisé par les systèmes D'exploitation Microsoft et Apple par exemple. Et les runtimes de langage comme Java. La spécification v2 a trouvé 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 où un point de code peut prendre 2 ou 4 octets. Le les points de code v1 originaux prennent 2 octets, ceux ajoutés prennent 4.

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

Un problème avec le Les encodages UTF-16/32 sont que l'ordre des octets dépendra de l'endian-ness 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 la catastrophe de la page de code dans une certaine mesure, ainsi que des débats houleux parmi les programmeurs quel choix UTF est "le meilleur". Leur association avec les valeurs par défaut du système d'exploitation dessine à peu près les lignes. Une contre-mesure est la définition d'une nomenclature, le Byte Order Mark, un point de code spécial (U+FEFF, espace de largeur zéro) au début d'un flux de texte qui indique comment le reste du flux est codé. Il indique à la fois L'encodage UTF et l'endianess et est neutre pour un moteur de rendu de texte. Malheureusement, il est facultatif et de nombreux programmeurs revendiquent leur droit de l'omettre de sorte que les accidents sont encore assez fréquents.

83
répondu Hans Passant 2015-09-30 15:18:27

ASCII a 128 positions de code, attribué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 ont actuellement été attribués à des caractères, et de nombreux points de code ont été rendus définitivement Non-caractères (c'est-à-dire non utilisés pour encoder n'importe quel 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) Le 128 les premières positions de code D'Unicode ont été définies pour avoir les mêmes significations qu'en ASCII, sauf que les positions de code des caractères de contrôle ASCII sont simplement définies comme désignant des caractères de contrôle, avec des noms correspondant à leurs noms ASCII, mais leurs significations ne sont pas définies en Unicode.

Parfois, cependant, Unicode est caractérisé (même dans la norme Unicode!) comme "ASCII large". Ceci est un slogan qui tente principalement de transmettre L'idée que Unicode est censé être un universal character code de la même manière que l'ASCII était autrefois (bien que le répertoire de caractères de L'ASCII était désespérément insuffisant pour une utilisation universelle), comme opposé à 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 en utilisant différents encodages de transfert, et en interne, en mémoire, Unicode les caractères sont généralement représentés en utilisant une ou deux quantités de 16 bits par caractère, selon la plage de caractères, parfois en utilisant une quantité de 32 bits par caractère.

10
répondu Jukka K. Korpela 2017-04-04 18:53:15

Java prend en charge Unicode, c'est-à-dire qu'il prend en charge tous les alphabets du monde entier. Donc la taille de char en java est de 2 octets. Et la gamme est de 0 à 65535.

entrez la description de l'image ici

9
répondu Siddarth Kanted 2018-01-07 06:28:19

ASCII et Unicode sont deux codages de caractères. Fondamentalement, ils sont des normes sur la façon de représenter les caractères de différence en binaire afin qu'ils puissent être écrits, stockés, transmis et lus dans les médias numériques. La principale différence entre les deux est dans la façon de coder les caractères et le nombre de bits utilisés pour chaque. ASCII utilisait à l'origine sept bits pour encoder chaque caractère. Cela a ensuite été porté à huit avec ASCII étendu pour remédier à l'insuffisance apparente de la original. En revanche, Unicode utilise un programme d'encodage à bits variables où vous pouvez choisir entre des encodages 32, 16 et 8 bits. L'utilisation de plus de bits vous permet d'utiliser plus de caractères au détriment de fichiers plus volumineux tandis que moins de bits vous donnent un choix limité, mais vous économisez beaucoup d'espace. Utiliser moins de bits (C'est-à-dire UTF-8 ou ASCII) serait probablement préférable si vous encodez un gros document en anglais.

L'une des principales raisons pour lesquelles Unicode était le problème a surgi des nombreux ASCII étendu non standard programme. Sauf si vous utilisez la page répandue, qui est utilisée par Microsoft et la plupart des autres sociétés de logiciels, alors vous êtes susceptible de rencontrer des problèmes avec vos personnages apparaissant sous forme de boîtes. Unicode élimine pratiquement ce problème car tous les points de code de caractères ont été standardisés.

Un autre avantage majeur D'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 des scripts de droite à gauche comme l'arabe. Le chinois, le japonais et les nombreuses autres variantes sont également représentés dans Unicode. Donc, Unicode ne sera pas remplacé de sitôt.

Afin de maintenir la compatibilité avec l'ancien ASCII, qui était déjà largement utilisé à l'époque, Unicode a été conçu de telle sorte que les huit premiers bits correspondent à celle de la page ASCII la plus populaire. Donc, si vous ouvrez un fichier codé ASCII avec Unicode, vous obtenez toujours les caractères corrects codés dans le fichier. Cela a facilité L'adoption D'Unicode car cela a réduit l'impact de l'adoption d'une nouvelle norme de codage pour ceux qui utilisaient déjà ASCII.

Résumé:

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.

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

7
répondu Nikhil Katre 2017-11-23 07:14:57

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

1
répondu sphynx888 2015-08-16 03:33:54