human
Quelle est la différence entre ASCII et Unicode
gpt
ASCII a 128 points de code, de 0 à 127. Il peut tenir dans un seul octet de 8 bits, les valeurs de 128 à 255 étant utilisées pour d'autres caractères. Avec des choix incompatibles, provoquant le désastre de la page de code. Un 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 apparu pour résoudre ce désastre. La version 1 a commencé avec 65536 points de code, couramment encodés sur 16 bits. Plus tard, étendu dans la version 2 à 1,1 million de points de code. La version actuelle est 6.3, utilisant 110 187 des 1,1 million de points de code disponibles. Cela ne rentre plus dans 16 bits.
L'encodage sur 16 bits était courant lorsque la v2 est arrivée, utilisé par les systèmes d'exploitation Microsoft et Apple, par exemple. Et les environnements d'exécution de langage comme Java. La spécification v2 a trouvé un moyen de mapper ces 1,1 million de points de code sur 16 bits. Un encodage appelé UTF-16, un encodage à longueur variable où un point de code peut prendre 2 ou 4 octets. Les points de code d'origine de la v1 prennent 2 octets, les points ajoutés en prennent 4.

Un autre encodage à 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 en prend plus. Le seul encodage à longueur fixe est UTF-32, qui prend 4 octets pour un point de code. Peu utilisé car il est assez inefficace. Il existe d'autres encodages, 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'endianness de la machine qui a créé le flux de texte. Ajoutez à cela UTF-16BE, UTF-16LE, UTF-32BE et UTF-32LE.

Le fait d'avoir ces différentes options d'encodage ramène en quelque sorte le désastre de la page de code, ainsi que des débats houleux entre programmeurs sur le choix de l'UTF "meilleur". Leur association avec les paramètres par défaut du système d'exploitation trace pratiquement les lignes. Une contre-mesure est la définition d'un BOM, le marqueur d'ordre des octets, 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 encodé. Il indique à la fois l'encodage UTF et l'endianness 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.