Formation <html>
[< >] caractères ASCII et Unicode

[back] - [reload] - [next]

ASCII (Acronyme de "American Standard Code for Information Interchange")
La mémoire de l'ordinateur conserve toutes les données sous forme numérique. Chaque caractère possède son équivalent en code numérique. C'est le Code ASCII - "American Standard Code for Information Interchange".

Le code Ascii 0 à 127
Le code ASCII de base représente 128 caractères (sur 7 bits = 128 valeurs, caractères de 0 à 127).
Créé pour la langue anglaise, il ne contient pas de caractères spécifiques à une autre langue. Il a donc falu créer le code ascii étendu pour obtenir les caractères accentués.

Le code ASCII étendu 128 à 255
Le code ASCII a été étendu à 8 bits pour pouvoir coder plus de caractères (sur 8 bits = 1 octet = 256 valeurs). L'espace obtenu, valeurs de 128 à 255, peut maintenant contenir les caractères accentués selon la nécessité du pays ! (128 à 255 = espace réservé pour l'encodage selon le pays).

Ces 256 valeurs codent les caractère de contrôle, les lettres majuscules et minuscules, les chiffres, les marques de ponctuation, les symboles et par exemple nos caractères accentués ISO-8859-1 (Latin1). En modifiant le 5ème bit, on passe de majuscules à minuscules (ajouter 32 au code ASCII en base décimale).

0 à 31 caractères de contrôle, tel que retour à la ligne (CR), Bip sonore (BEL)
32 à 47 caractères spéciaux
48 à 57 chiffres
58 à 64 caractères spéciaux
65 à 90 caractères majuscules
92 à 96 caractères spéciaux
97 à 122 caractères minuscules
123 à 127 caractères spéciaux
128 à 255 selon la table de caractère du pays (voir ci-dessous)

Tables de caractères
Des zones territoriales sont établies en fonction du langage écrit.
Chaque zone utilise sa propre table de caractère Ascii 128 à 255. Elle peut être choisie, dans le navigateur ou automatiquement par un meta tag dans le code html.

Nom de Table Zone correspondante Standard ISO
Unicode Universel, International UTF-8
Latin-1 Europe de l'Ouest, Amérique Latine. ISO-8859-1
Latin-2 Europe Centrale, Europe de l'Est ISO-8859-2
Latin-3 Europe du Sud-Est ISO-8859-3
Latin-4 Scandinavie, Baltique ISO-8859-4
Grec Grèce ISO-8859-7
Japonais Japon EUC-JP ou Shift_JIS
etc.    

Table de caractères ASCII étendus :
ascii 000-127
ascii 128-255ascii spéciaux, ascii complète du Latin-1 dans une fenêtre séparée.

Echapper les caractères accentués (échapper=coder)
Les normes html demandent de respecter le codage des tables de caractères. On ne peut pas écrire les lettres accentuées (ö, è, à, é, etc.) et autres caractères spéciaux dans le code html.
Sauf si vous placez entre les balises <head>...et...</head> de votre page la balise
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
.
Ce qui permet de résoudre ce problème, uniquement pour les visiteurs ayant installé les polices de caractères accentuées, conforme à la norme iso-8859-1. Car les navigateurs actuels sont permissifs, mais vous devez savoir que vos pages ne seront peut-être plus lisibles dans des pays utilisant des jeux de caractères non latins.
En outre les caractères accentués sauteront vraisemblablement dans les moteurs de recherche anglophones, ce point est à méditer.

Il est donc conseillé d'utiliser le codage conforme au norme W3C. Le choix idéal est de mettre le meta tag adéquat et d'échaper les caractères aux normes du W3C. Les programmes tel que Dreamweaver le font automatiquement !

Page de test : meta_iso_avec.htm et meta_iso_sans.htm

Pour échapper un caractère accentué (appel d'entité)
On utilise une combinaison précédée du caractère " & " et terminée par un " ; " (point-virgule).
En html é se code &eacute; le plus lisible et le plus facile à mémoriser !
Moins lisible, en ASCII é se code &#0233; (voir les tables de caractères)

Il suffit de se souvenir d'ouvrir avec "&" et de fermer avec ";" De choisir la lettre à coder en minuscule ou majuscule "e" ou "E". De mettre à sa suite le code (que l'on aura mémorisé) de l'accent concerné :
acute = aigu (é = &eacute;)
grave = grave (è= &egrave;)
grave = grave (È= &Egrave;)
circ = circonflexe (î = &icirc;)
uml = tréma (ü = &uuml;)
cedil = cédille (ç = &ccedil;)

Pour obtenir cette phrase : Un éléphant apparaît devant moi et me marche sur le pied, aïe!
Il faut coder les accents comme ceci (norme html - ISO LATIN-1) :
Un &eacute;l&eacute;phant appara&icirc;t devant moi et me marche sur le pied, a&iuml;e!
Il faut coder les accents comme ceci (norme ASCII - ISO LATIN-1) :
Un &#0233;l&#0233;phant appara&#238;t devant moi et me marche sur le pied, a&#239;e!

Sans quoi le résultat pourrait ressembler à :
Un ZèlZèphant apparaÓt devant moi et me marche sur le pied, a…e!

De plus les caractères spéciaux étant utilisés dans la syntaxe HTML doivent être échappés pour ne pas être confondu avec leur équivalent. Comme pour XML qui fourni cinq références d'entités :
&lt; pour (<) : le signe inférieur à (ou chevron ouvrant).
&gt; pour (>) : le signe supérieur à (ou chevron fermant).
&amp; pour (&) : l'esperluette (ouverture de caractère échappé).
&quot; pour (") : le signe guillemets (ouverture et fermeture de valeur de paramètre).
Le suivant n'est pas obligatoire en HTML, mais seulemnt en XML :
&apos; pour (') : le signe apostrophe ou simple quotte (ouverture et fermeture de valeur de paramètre).

Rassurez-vous, la plupart des éditeurs html font automatiquement l'encodage! Si non, vous écrivez les carractères accentués et à la fin vous executez la commande "rechercher et remplacer" : "é" remplacer par "&eacute", etc. ATTENTION : ne faites pas rechercher et remplacer pour les 5 entités XML !

UNICODE UTF-8 : page de test UTF-8 <<< Le fichier est d'un format binaire différent en UTF-8 !!!

Généralités sur unicode
Unicode est un système dans lequel les signes ou éléments de toutes les cultures d'écriture connues sont fixés. Par ce système, il devient possible de dire à un ordinateur quel signe on veut voir représenté. La condition préalable est naturellement que l'ordinateur ou le programme exécuté connaisse le système unicode.

Unicode s'efforce d'englober complètement tous les signes connus des cultures d'écriture présentes et passées. Les caractères sont catalogués par classe et reçoivent une valeur de caractères. Tous les caractères et sortes de caractères imaginables sont concernés. Pour les caractères de contrôle tels que les traits d'union, les espaces imposés ou les tabulations existent des unicodes. Les caractères de formules mathématiques sont représentés tout autant que les signes représentant des syllabes ou des mots des cultures de l'écriture de l'Extrême Orient. Même les différentes parties de caractères comme par exemple les accents ou trémas sur les caractères français ont leur propre unicode. Les caractères peuvent être aussi combinés de façon dynamique - ainsi il existe bien aussi naturellement un "é" français, mais la même lettre peut être créée à partir de "e" et de l'accent sur le caractère.

Outre le simple adressage d'un signe ou d'un élément, un jeu de propriétés est aussi défini dans le système unicode pour chaque signe. Le sens de l'écriture (pour l'arabe par exemple le sens d'écriture est de droite à gauche) fait partie de la propriété du signe. D'innombrables résultats des recherches sur la science des langues au niveau mondial sont rassemblées dans le système unicode.

Le consortium Unicode, fondé en 1991 et constitué de linguistes et autres spécialistes, recherche les caractères à adopter, Les valeurs de caractères accordées ont une force obligatoire. Depuis la version 2.0, le système Unicode est aussi synchronisé avec la norme internationale ISO/IEC 10646. C'est important dans la mesure où HTML depuis la version 4.0 ainsi que XML depuis la version 1.0 misent sur la norme ISO/IEC 10646. Quand vous voulez dons savoir comment on doit noter un certain signe en HTML ou en XML, vous devez rechercher dans les tableaux de caractères Unicode quelle valeur a le signe désiré. Ensuite, vous pouvez noter le signe désiré dans le texte source du fichier HTML ou XML, par une notation numérique telle que par exemple &#9871; (forme décimale) ou bien &#x268F; (forme hexadécimale avec x).

Les valeurs de caractères des signes englobés par Unicode étaient encore récemment exprimés exclusivement par un nombre long de deux octets. De cette façon, il est possible de lister jusqu'à 65536 caractères différents dans le système (2 octets = 16 bits = 216 combinaisons).
Dans la version complète Unicode 3.0 de septembre 1999 49.194 caractères du monde entier étaient déjà listés - la limite de 65536 était déjà bien proche.
Dans la version 3.1 de mars 2001, 44,946 nouveaux caractères ont été adoptés. Par exemple des signes d'écritures historiques. Et c'est ainsi que la version 3.1 connaît déjà 94.140 caractères, ce pour quoi la limite de deux octets devait être franchie.
Le schéma à deux octets désigné dans le système Unicode comme Basic Multilingual Plane (BMP) , est remplacé pour cette raison par un schéma à quatre octets, qui permet d'adresser le nombre confortable de 4.294.967.296 caractères (4 octets = 32 bits = 232 combinaisons de bits).

Mais encore...
La contrainte des codages de type ASCII provient du fait qu'ils sont totalement incompatibles entre eux : il est impossible dans cette situation d'écrire un texte exploitant en même temps des caractères de plusieurs jeux différents.

La norme Unicode a été développée principalement pour pouvoir palier à ce problème : elle contient à elle seule l'ensemble des caractères utilisés dans toutes les langues. Elle est définie dans la norme ISO 10646, qui distingue deux méthodes d'encodage à 16 (2 octets) bits et 32 bits (4 octets) : UCS-2 (16 bits) et UCS-4 (32 bits). UCS-2 étant codé sur 16 bits est capable de géré (2^16)^2 = 65536 caractères alors que UCS-4 codé sur 32 bits gère (2^32)^2 = 4 294 967 296 caractères.

Un inconvénient et non des moindres à l'Unicode est que la norme préserve la taille d'encodage de chaque caractères, ainsi un texte en français est en gros 2 fois plus important en unicode que le même texte dans son équivalent ASCII. Par contre un texte écrit en japonais sera de taille équivalente s'il est écrit avec le jeu Unicode ou le jeu JIS (jeu propre au japonais).

UTF-8 : une transformation de l'encodage Unicode.

La transformation UTF-8 (UCS Transformation format 8-Bits) règle ce problème en fournissant une méthode d'encodage variable entre 1 et 6 octets. Dans ce jeu, les 127 caractères de l'ASCII (7bits) sont codés sur 1 octet, la plupart des caractères non-idéographiques sont codés sur 2 octets et le reste des caractères Unicode sont codés sur 3 octets (le premier octet indique le nombre d'octets sur lesquels le caractère est codé). Ainsi UTF-8 fourni une méthode bien plus légère que Unicode : la taille du texte variera en fonction des caractères utilisés. 

Note : Un texte écrit en (en-US) a donc exactement la même taille que s'il était écrit en UTF-8, car le jeu US n'utilise que 127 caractères (ASCII 7 bits) qui sont inclus en standard dans UTF-8.
Il existe d'autres codages UTF-7 (supporté par ASP.NET) ou UTF-16 : la seule différence avec UTF-8 est le nombre de bits utilisés lors de la transformation.

Typiquement dans une page Web classique, vous pouvez utiliser l'entête suivante pour pouvoir utiliser la transformation UTF-8 dans la page :

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

à suivre...

http://www.unicode.org/ et FR : http://www.unicode.org/standard/translations/french.html

 © 2002 - www.inforweb.ch ®