Codage binaire du texte

Auteur et date de la dernière mise à jour de la page. EC @ IV.2008
Lecture(s) conseillée(s) avant d'attaquer le présent chapitre. L'information binaireUne page à butiner si, pour vous, le bit reste un sujet un peu tabou...
Liste des mots et notions définis tout au long de cette page.

Alors voilà...

Nous l'avons vu ensemble: in petto, votre ordinateur ne cause que le binaire, "langage" pour le moins basique et rébarbatif qui permet néanmoins de coder n'importe quel nombre imaginable de manière plus ou moins intuitive et plus ou moins exacte.
Plus ou moins...

Oui mais voilà: les nombres, c'est très bien pour les mathématiciens, statisticiens, comptables et autres blouses blanches à gros cursus... mais nous, humains normalement constitués, préférons quand même communiquer avec des mots.

Nouveau défi de taille, donc, pour le processeur de votre machine: se comporter en créature un tant soit peu évoluée et coder des lettres uniquement à l'aide de ses tout petits bits.

Au programme d'Arcana, donc, aujourd'hui: "Deux chiffres et des lettres".

Principes généraux de codage

Samuel Morse... .- -- ..- . .-.. -- --- .-. ... .Emile BaudotEmile Baudot, l'homme qui a quasiment donné son nom à l'unité de débit des transmissions informatiques: le baud...Il y a près de deux siècles, Samuel Morse [1791-1872] nous montrait, avec un certain succès, la manière de coder tout un alphabet uniquement à l'aide de deux symboles: un point et un trait.
Logiquement, la chose ne devrait pas présenter trop de problème avec des "1" et des "0", ce que démontra d'ailleurs l'ingénieur français Emile Baudot [1845-1903] dès 1870 avec brioCasimir Brio, son fidèle assistant....

De fait, le principe général du codage binaire du texte est désarmant d'évidence: à chaque caractère que l'on veut coder, on associe un nombre donné, toujours identique.
Pour mener à bien cette numérisation, trois éléments s'avèrent nécessaires:

  • Un jeu de caractères, ou répertoire, décrivant tous les caractères que l'on désire pouvoir utiliser,
  • Une table de référence, attribuant à chaque caractère du répertoire un code numérique unique,
  • Une technique d'encodage, permettant de transformer le code numérique de chaque caractère sous forme binaire, c'est-à-dire d'octet(s).

A noter qu'il est assez fréquent de trouver le terme anglais un peu vague de charset pour désigner, selon le contexte, un jeu de caractères et/ou l'encodage qui lui est attaché.
 

Caractère Code numérique Code binaire
A 1 00000001
B 2 00000010
C 3 00000011
D 4 00000100
Exemple de table de référence

Extrait de table de référence secrète prise sur un espion monégasque en mission à Menton...

Ainsi, dès lors que vous saisissez du texte avec un ordinateur, ce texte est numérisé par la machine à l'aide d'une table de référence, dont vous ne savez généralement rienOui, il y a des choses qu'il vaut mieux ne pas savoir.... Cette phase d'encodage donne naissance à une séquence binaire plus ou moins longue appelée, éventuellement, à être stockée à des fins de sauvegarde ou de télétransmission.

Avant toute réutilisation de cette séquence, une phase de décodage intervient alors, dans le but de retransformer le code binaire en texte compréhensible. Compréhensible... du moins tant que cette phase de décodage s'appuie sur la même table de référence que celle qui a servi à l'encodage !

Entendons nous bien: une table de référence ne code que des caractères "bruts", sans aucune information quant à leur taille, leur couleur ou leurs fioritures. En d'autres termes, une table de référence décrit des caractères abstraits...quasi platoniciens. et ne précise absolument pas comment ces caractères devront être affichés à l'écran ou après impression.

A noirsA rimbaldiens, appréhendés par différentes polices de caractères...C'est la tâche du logiciel qui exploite ces codes...et du système d'exploitation sur lequel s'appuie ce logiciel. de traduire ceux-ci en symboles visuels (ou glyphes) par le recours conjoint à des données de formatage et à une police de caractères.

Citons, pour être complet, que plusieurs tables de référence gravitant dans l'univers nébuleux de l'informatique, il est parfois nécessaire de passer d'une table de référence à une autre; une phase de transcodage s'avère alors nécessaire.

Da ASCII codes

ASCII: la table de l'aloi

Très longtemps, la table de référence la plus utilisée en informatique fut la table ASCIIPrononcer "aski", à la française, ou bien alors "éski", à la branchouille. (American Standard Code for Information Interchange), table compilant un jeu de 128 caractères ci-dessous décrits.

Cette relative petitesse de la table ASCII avait néanmoins l'avantage de rendre aisé l'encodage de ses caractères, chacun pouvant être transcrit sous la forme d'un unique octetMais si c'est très aisé, vous allez voir... sans instruction particulière.

00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
0 NUL(Null) SOH(Start Of Heading) STX(Start of TeXt) ETX(End of TeXt) EOT(End Of Transmission) ENQ(ENQuire) ACK(ACKnowledge) BEL(BELl). Ça alors ! Un caractère sonore ! BS(Backspace) TAB(Tabulation) LF(Line Feed) VT(Vertical Tabulation) FF(Form Feed) CR(Carriage Return) SO(Shift Out) SI(Shift In)
1 DLE(Data Link Escape) DC1(Device Control 1) DC2(Device Control 2) DC3(Device Control 3) DC4(Device Control 4) NAK(Negative AcKnowledge) SYN(SYNchronous idle) ETB(End of Transmission Block) CAN(CANcel) EM(End of Medium) SUB(SUBstitute) ESC(ESCape) FS(File Separator) GS(Group Separator) RS(Record Separator) US(Unit Separator)
2 espace ! " # $ % & ' ( ) * + , - . /
3 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
4 @ A B C D E F G H I J K L M N O
5 P Q R S T U V W X Y Z [ \ ] ^ _
6 ` a b c d e f g h i j k l m n o
7 p q r s t u v w x y z { | } ~ DEL(DELete)
Table de référence ASCII, version originale (US ASCII, alias ANSI X3.4).

Attention ! Les codes des différents caractères sont ici exprimés en hexadécimal...une manière plus conviviale de parler en binaire., et s'étendent donc de #00 (0) à #7F (127).

Cette table, véritable légende de l'informatique médiévale...c'est-à-dire, grosso modo, les années cinquante., appelle illico quelques commentaires bien sentis:

Pourquoi un code basé sur sept bits (128 valeurs) alors que je croyais l'ordinateur monomaniaque de l'octet ?

Il est vrai que les caractères de la table ASCII sont codables sur sept bits. Mais, comme nous le disions, la table ASCII est une création quasi préhistorique, bien antérieure à l'avènement de l'octet comme unité générique de l'information binaire.

Qui plus est, même aux premiers temps de l'octet roi, les ordinateurs et réseaux informatiques d'alors n'avaient pas la fiabilité de nos binious actuels et d'Internet, et le huitième bit pouvait alors précieusement servir de bit de parité, c'est-à-dire, pour parler normalement, de moyen de contrôle de l'exactitude des sept autres bits.

Il m'est déjà arrivé par le passé d'ouvrir un "fichier ASCII" et de constater qu'il était quasiment illisible. Comment cela se fait-il ?

Ceci peut s'expliquer... En fait, la table de référence ASCII est un standard si indiscutable et si universellement adopté que:

  • la quasi totalité des tables de référence plus récentes, comme nous le verrons, ont pris pour sage décision de reprendre in extenso la table de référence ASCII...c'est-à-dire les mêmes caractères, associés aux mêmes codes., en y ajoutant d'autres caractères sélectionnés selon des critères généralement linguistiques
  • l'expression "fichier ASCII" est devenue, de manière impropre mais néanmoins totalement passée dans les moeurs numériques, un raccourci fort pratique pour désigner un fichier texte ayant été encodé à l'aide de la table ASCII originelle ou de l'une de ses multiples versions étendues.

La nuance est d'importance puisqu'un fichier constitué d'un texte encodé, par exemple, à l'aide de la table de référence ASCII étendu latin/cyrillique peut parfaitement prétendre au qualificatif de "fichier ASCII". Or, si ledit fichier ne précise pas son format d'encodage ou s'il le précise mais que votre ordinateur ne dispose pas de cette table de référence ou d'une police de caractères permettant l'affichage des caractères slaves, son contenu apparaîtra si ce n'est illisible, du moins incomplet, les seuls caractères préservés étant ceux appartenant à la table ASCII originelle.

Heu...compris ?

Une paire d'ASCII...

La table ASCII devint rapidement si incontournable que l'organisme supranational et normalisateur ISO (International Organization for StandardizationOui, ceci fait effectivement IOS, et non pas ISO. Mais c'est parce que ISO n'est pas un acronyme, mais un clin d'oeil au préfixe grec iso, qui signifie "égal".) l'inclut bien vite parmi ses indiscutables standards, sous le nom fort poétique de ISO 646.

Néanmoins, de par son rôle international, l'ISO "désaméricanisa" quelque peu la table ASCII en permettant sa déclinaison en différentes variantes nationales. A cette fin, plusieurs codes de la table originale, correspondant aux caractères parmi les moins usités, furent laissés à la disposition des diverses langues étrangères. Ainsi, par exemple, la déclinaison NF Z 62-010, alias ISO 646-FR, se trouvait à peu près taillée pour la langue de Molière.

Dès lors, tout le Monde était heureux et fier de disposer ainsi de sa propre table ASCII, douillette et customisée. L'époque, il est vrai, n'était pas encore au village global et au serveur off-shore...

Extension d'un bit: les tables ASCII étendu

Les successives générations d'ordinateurs et, dans le même temps, les dispositifs de transmission numérique gagnant en fiabilité, le bit de parité perdait peu à peu de son utilité et l'idée de le dédier comme ses sept autres collègues au codage proprement dit laissait augurer de nouvelles tables de référence deux fois plus vastes...puisque si 7 bits permettent de coder 27 caractères, 8 bits permettent d'en coder deux fois plus (28).

La table ASCII étant devenue incontournable, il n'était pas question de bouleverser les 128 codes déjà assignés mais simplement d'ajouter à ceux-ci 128 autres caractères qui permettraient ainsi d'obtenir des tables ASCII étendu (Extended ASCII), totalement compatibles avec leur aïeule.

Oui mais voilà: à quelles lettres dédier ces nouveaux espaces providentiels ? Au "ê" français ? au "Ø" suédois ? au "ß" allemand ? au "‡" saturnien ? Quelle que fût la décision, les déçus eussent été nombreux...

Quoi qu'il en fût, cantonnés à des valeurs comprises entre 0 et 255, l'encodage des caractères ASCII étendu restait toujours aussi évident, chaque code étant directement transcriptible en un octet.

Les tables d'OS

IBM et Microsoft, premiers à table

En 1981, une petite société américaine du nom d'IBM s'apprête à engranger du dollar en lançant son dernier bébé: le PC-AT, ordinateur révolutionnaire dont l'une des caractéristiques qui nous intéresse plus particulièrement ici est l'adoption, pour la première fois, d'une table de référence par défaut codée sur huit bits.

Dans le sillage d'IBM, une autre petite société du nom de MicrosoftUn exemple pour tous les sous-traitants de la planète... est sollicitée afin de fournir une interface logicielle à la bête. Celle-ci crée donc pour l'occasion une application originaleLes avis divergent un peu sur cet épithète... qu'elle baptise DOS (Disk Operating System), ou, pour parler en ASCII-FR, système d'exploitation de disque.

Parmi les fonctionnalités du DOS, la très agréable possibilité de charger au démarrage de la machine une table de référence de son choix, permettant ainsi à chaque utilisateur de retrouver son alphabet national ainsi que tous ses caractères spécifiques...quand y'en a pour DOS, y'en a pour toi.
(pathétique)
.

Plusieurs langues à la même table

Il est somme tout fréquent de voir confondues les notions de langages et de tables de référence. De fait, la confusion est maladroite car une même table de référence est susceptible de décrire les caractères de plusieurs langues, non nécessairement voisines. Ainsi, par exemple, notre page de code 850 permet de parfaitement s'exprimer tant en Français qu'en Anglais ou en Italien.

A cette fin, différentes tables de référence, baptisées pour l'occasion pages de code (codepage) furent mises au point, de manière plus ou moins pertinente et linguistiquement sensée.

Ainsi, tandis que la page de code 437, également baptisée Extended ASCII OEM (Original Equipment Manufacturer) constituait la page de code par défaut...c'est-à-dire américaine., nous, heureux Européens occidentaux, nous voyions proposée la codepage 850, dite "multilingual latin-1".
 

00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
0 NUL
1 §
2 espace ! " # $ % & ' ( ) * + , - . /
3 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
4 @ A B C D E F G H I J K L M N O
5 P Q R S T U V W X Y Z [ \ ] ^ _
6 ` a b c d e f g h i j k l m n o
7 p q r s t u v w x y z { | } ~
8 Ç ü é â ä à å ç ê ë è ï î ì Ä Å
9 É æ Æ ô ö ò û ù ÿ Ö Ü ¢ £ ¥ ƒ
A á í ó ú ñ Ñ ª º ¿ ¬ ½ ¼ ¡ « »
B
C
D
E α ß Γ π Σ σ µ τ Φ Θ Ω δ φ ε
F ± ÷ ° · ² nbs...c'est-à-dire no-break space, ou plutôt "espace dur". Ainsi qualifie-t-on un espace séparant deux mots dont on ne veut pas qu'ils soient séparés par un inopportun retour à la ligne.
Page de code 850, alias Latin-1 (version graphique)

Attention ! Selon votre configuration personnelle, respecté(e) lecteur(trice), il est somme toute possible que certains caractères de ce tableau ne s'affichent pas correctement. Reste à vous tourner alors vers la version image de cette table, cachée ci-dessous.

Bon, on pourra toujours chipoter qu'il manque l'indispensable "e dans l'o", mais l'effort reste louable...

La page de code 850, format "image".
Page de code 850

ASCII divers

Les caractères de contrôle semblent avoir disparu de la page de code 850. Peut-on toujours dans ce cas parler de table ASCII étendu ?

En fait, oui. Et c'est pour cela que nous avons précisé qu'il s'agissait ci-dessus de la version "graphique" de la page de code 850. En pratique, les caractères de contrôle étaient toujours exprimables par leur code ASCII originel, mais apparaissant dans un contexte graphique...comme, par exemple, un éditeur de texte., ces codes perdaient leur signification originelle, de toute façon de plus en plus désuette, et apparaissaient alors sous ces formes délicieusement naïves.

Mais qu'est-ce donc que toutes ces formes cabalistiques et autres symboles ésotériques ?

Vous voulez sans doute parler de ces curieux symboles disséminés entre #B0 (176) et #DF (223) ?
Très simple. Même si la chose aujourd'hui semble inconcevable, le DOS était un système d'exploitation dit "en ligne de commande". En clair, ni icône, ni cliquer-glisser, ni jolie fenêtre redimensionnable. Les commandes DOS se résumaient à quelques ordres concis, entrés au clavier et exécutés avec la touche entréeLe bon temps, quoi..

L'incorporation de ces quelques symboles graphiques aux tables ASCII étendu permettaient néanmoins aux applications de pouvoir dessiner des fenêtres basiques, des tableaux, voire même des dessins certes rudimentaires mais du plus bel effet (pour l'époque)Certains grands malades s'illustrèrent même brillamment dans une nouvelle forme d'art moderne: "l'ASCII Art"..

Les tables par la Fenêtre®

En 1990, les dirigeants de Microsoft, qui ont tranquillement prospéré sur leur DOS...technique commerciale reprise depuis avec un certain succès par C. Morgane et, dans le secteur public, C. Deviers-Joncourt..., assurent définitivement l'avenir de leur progéniture en commercialisant la version 3 de leur système d'exploitation graphique, baptisé Windows.
Celui-ci innove sur de nombreux points...dont plusieurs points très librement inspirés par le MacOS de la crémerie d'en face..., dont l'adoption d'une nouvelle table de référence par défaut baptisée Windows-1252, ou WinLatin1, ou encore ANSI...de manière d'ailleurs totalement impropre puisque l'ANSI (American National Standards Institute) n'ayant jamais validé cette table de référence..
 

00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
0 NUL(Null) SOH(Start Of Heading) STX(Start of TeXt) ETX(End of TeXt) EOT(End Of Transmission) ENQ(ENQuire) ACK(ACKnowledge) BEL(BELl). Ça alors ! Un caractère sonore ! BS(Backspace) TAB(Tabulation) LF(Line Feed) VT(Vertical Tabulation) FF(Form Feed) CR(Carriage Return) SO(Shift Out) SI(Shift In)
1 DLE(Data Link Escape) DC1(Device Control 1) DC2(Device Control 2) DC3(Device Control 3) DC4(Device Control 4) NAK(Negative AcKnowledge) SYN(SYNchronous idle) ETB(End of Transmission Block) CAN(CANcel) EM(End of Medium) SUB(SUBstitute) ESC(ESCape) FS(File Separator) GS(Group Separator) RS(Record Separator) US(Unit Separator)
2 espace ! " # $ % & ' ( ) * + , - . /
3 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
4 @ A B C D E F G H I J K L M N O
5 P Q R S T U V W X Y Z [ \ ] ^ _
6 ` a b c d e f g h i j k l m n o
7 p q r s t u v w x y z { | } ~ DEL(DELete)
8 ƒ ˆ Š Œ Ž
9   ˜ š œ ž Ÿ
A nbs...c'est-à-dire no-break space, ou plutôt "espace dur". Ainsi qualifie-t-on un espace séparant deux mots dont on ne veut pas qu'ils soient séparés par un inopportun retour à la ligne. ¡ ¢ £ ¤ ¥ ¦ § ¨ © ª « ¬ -Caractère joliment appelé "tiret doux" (soft hyphen); normalement invisible, il permet d'indiquer les endroits d'un mot susceptibles d'être scindés en fin de ligne. Très pratique... dès lors que vous prenez la peine d'en insérer manuellement entre chaque syllabe de tous les mots de votre texte... ® ¯
B ° ± ² ³ ´ µ · ¸ ¹ º » ¼ ½ ¾ ¿
C À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï
D Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü Ý Þ ß
E à á â ã ä å æ ç è é ê ë ì í î ï
F ð ñ ò ó ô õ ö ÷ ø ù ú û ü ý þ ÿ
Page de code Windows-1252, alias WinLatin-1

Attention ! Même remarque que précédémment quant à l'éventualité de ne pas pouvoir visualiser certains caractères, et le recours conséquent à la version image de cette table.

Notons au passage que certains codes - marqués d'un fond rouge - sont tout bonnement non attribués, et compâtissons à la brutale disparition des caractères graphiquesWindows étant un système d'exploitation 100% graphique, ceux-ci n'avaient effectivement plus raison d'être... de la page de code 850.

Tiens, on va enfin pouvoir écrire des œufs...et même des ŒUFS d'autruche ! correctement...

La page de code Windows-1252, format "image".
Page de code 850

ASCII d'ALTitude

C'est bien beau tous ces nouveaux caractères, mais comment je fais, moi, scrupuleux et respectueux rédacteur en langue française, pour pondre des caractères comme "Ç" majuscule, qui ne figurent même pas sur mon clavier ?

Avant toute chose, prenez bien soin de vous, car vous êtes manifestement une espèce en danger.

Ensuite, il existe une petite astuce qui, hélas, ne marche pas en toute circonstance...et en tout cas uniquement sous Windows. mais suppose que vous émétiez d'abord une préférence pour la page de code 850 ou la page de code 1252.

Ensuite, la procédure diffère selon votre choix:

  • Afin de pouvoir afficher à l'écran un caractère de la page de code 850, il suffit (!) de taper son code décimal à trois chiffres sur le pavé numérique en laissant appuyé le doigt sur la touche ALT du clavier. Ainsi, par exemple, le ç majuscule, codé par le code 128 (#80) sera-t-il affiché en appuyant sur ALT puis en appuyant successivement sur les touches 1, 2 puis 8.
    Démonstration: Ç.
  • Afin de pouvoir afficher à l'écran un caractère de la page de code 1252, la procédure est quasi identique, sauf qu'il faudra cette fois taper le code correspondant à ladite page en précédant ce code d'un zéro. Ainsi, par exemple, le ç majuscule, codé cette fois par le code 199 (#C7) sera-t-il affiché en appuyant sur ALT puis en appuyant successivement sur les touches 0, 1, 9 puis encore 9.
    Pour preuve: le tableau ci-dessus a été entièrement rempli à la main par cette méthode !

ISO-8859: huit bits et tant de langues !

Tout comme il le fit pour la table ASCII originale, l'ISO établit de son côté une liste de tables de référence dédiées à différents alphabets sous le nom générique de norme ISO-8859.

Toutes ces tables se trouvaient basées sur la même ossature:

Pour toutes celles et ceux que la computo-linguistique passionne, on ne peut que conseiller le site incontournable de Roman Czyborra, spécialiste mondial de la table de référence ISO-8859, et de deux ou trois autres trucs...

Ainsi, la table ISO-8859-1, également appelée Latin-1, nous concerne-t-elle plus particulièrement puisqu'elle compilait les caractères dits "occidentaux", ou du moins ceux requis par la quasi totalité des langues d'Europe occidentale.

00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
0 NUL(Null) SOH(Start Of Heading) STX(Start of TeXt) ETX(End of TeXt) EOT(End Of Transmission) ENQ(ENQuire) ACK(ACKnowledge) BEL(BELl). Ça alors ! Un caractère sonore ! BS(Backspace) TAB(Tabulation) LF(Line Feed) VT(Vertical Tabulation) FF(Form Feed) CR(Carriage Return) SO(Shift Out) SI(Shift In)
1 DLE(Data Link Escape) DC1(Device Control 1) DC2(Device Control 2) DC3(Device Control 3) DC4(Device Control 4) NAK(Negative AcKnowledge) SYN(SYNchronous idle) ETB(End of Transmission Block) CAN(CANcel) EM(End of Medium) SUB(SUBstitute) ESC(ESCape) FS(File Separator) GS(Group Separator) RS(Record Separator) US(Unit Separator)
2 espace ! " # $ % & ' ( ) * + , - . /
3 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
4 @ A B C D E F G H I J K L M N O
5 P Q R S T U V W X Y Z [ \ ] ^ _
6 ` a b c d e f g h i j k l m n o
7 p q r s t u v w x y z { | } ~ DEL(DELete)
8 PAD(PADding character) HOP(High Octet Preset) BPH(Break Permitted Here) NBH(No Break Here) IND(INDex) NEL(NExt Line) SSA(Start of Selected Area) ESA(End of Selected Area) HTS(Horizontal Tab Set) HTJ(Horizontal Tab Justified) VTS(Vertical Tab Set) PLD(Partial Line forwarD) PLU(Partial Line backward) RI(Reverse lIne feed) SS2(Single-Shift 2) SS3(Single-Shift 3)
9 DCS(Device Control String) PU1(Private Use 1) PU2(Private Use 2) STS(Set Transmit State) CCH(Cancel CHaracter) MW(Message Waiting) SPA(Start of Protected Area) EPA(End of Protected Area) SOS(Start Of String) SGCI(Single Graphic Char Intro) SCI(Single Char Intro) CSI(Control Sequence Introducer) ST(String Terminator) OSC(OS Command) PM(Private Message) APC(App Program Command)
A nbs...c'est-à-dire no-break space, ou plutôt "espace dur". Ainsi qualifie-t-on un espace séparant deux mots dont on ne veut pas qu'ils soient séparés par un inopportun retour à la ligne. ¡ ¢ £ ¤(Introduit à cette position dans la déclinaison 8859-15, alias Latin-9 - monnaie unique oblige.) ¥ ¦ § ¨ © ª « ¬ -Caractère joliment appelé "tiret doux" (soft hyphen); normalement invisible, il permet d'indiquer les endroits d'un mot susceptibles d'être scindés en fin de ligne. Très pratique... dès lors que vous prenez la peine d'en insérer manuellement entre chaque syllabe de tous les mots de votre texte... ® ¯
B ° ± ² ³ ´ µ · ¸ ¹ º » ¼ ½ ¾ ¿
C À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï
D Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü Ý Þ ß
E à á â ã ä å æ ç è é ê ë ì í î ï
F ð ñ ò ó ô õ ö ÷ ø ù ú û ü ý þ ÿ
Table ISO-8859-1 Multilingue Latin-1 (page de code 819)

Remarquons, hormis pour la plage #80-#9F particulière, la très grande ressemblance entre cette table ISO-8859-1 et la table Windows-1252.

D'autres tables moins étoilées

La table ASCII et ses versions étendues ne sont pas les seules tables de référence gravitant dans la galaxie informatique. En voici quelques autres, plus ou moins célèbres.

Mac OS Roman: le jeu de Pomme®

Comme son nom l'indique, la table de référence Mac OS Roman est l'équivalent de la page de code Windows-1252, mais vu par la créature la plus célèbre de la société Apple: le Macintosh.

Pour constituer cette table, les 128 premiers caractères ont été intégralement copiés sur la table ASCII, les 128 suivants attribués à différents caractères ci-dessous listés:

00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
8 Ä Å Ç É Ñ Ö Ü á à â ä ã å ç é è
9 ê ë í ì î ï ñ ó ò ô ö õ ú ù û ü
A ° ¢ £ § ß ® © ´ ¨ Æ Ø
B ± ¥ µ π ª º Ω æ ø
C ¿ ¡ ¬ ƒ « » nbs...c'est-à-dire no-break space, ou plutôt "espace dur". Ainsi qualifie-t-on un espace séparant deux mots dont on ne veut pas qu'ils soient séparés par un inopportun retour à la ligne. À Ã Õ Œ œ
D ÷ ÿ Ÿ /
E · Â Ê Á Ë È Í Î Ï Ì Ó Ô
F ð Ò Ú Û Ù ı ˆ ˜ ¯ ˘ ˙ ˚ ¸ ˝ ˛ ˇ
Table de référence Mac OS Roman

EBCDIC: une table à l'écart

La table de référence EBCDIC (Extended Binary Coded Decimal Interchange Code) est une curiosité en elle-même puisqu'il s'agit d'une des très rares tables de référence qui, bien qu'également codée sur huit bits, soit absolument incompatible avec le standard ASCII.

Conçue par IBM pour IBM, et plus particulièrement pour ses mainframesTerme anglais, immédiatement ridicule dès que traduit en Français, désignant les très gros ordinateurs que seules peuvent s'offrir les très grosses sociétés en très gros besoin de puissance de calcul., la table EBCDIC a entre autres particularités d'avoir été conçue dans l'unique optique de faciliter le travail de la machine, et, par conséquent, en dépit de tout bon sens humanoïde. Ainsi, par exemple, les caractères alphabétiques ne se suivent-ils pas de manière... alphabétique mais sont disposés de façon à faciliter la production de cartes perforées.

EBCDIC vs ASCII

Pour les quelques fans du jeu de caractères EBCDIC, un petit exposé assez exhaustif sur son avantage et ses inconvénients.

Vous l'aurez compris, la table EBCDIC date un peu et n'est plus guère évoquée hors des limites territoriales de la cafet' de la firme, et en tout cas jamais par la plèbe de l'informatique personnelle.

Unicode: Tout le Monde à la même table !

Les différentes déclinaisons nationales de la table ASCII étendu constituaient une entreprise louable de permettre à tout à chacun de tapoter du texte dans sa langue maternelle, mais souffraient dans le même temps de contraintes rédhibitoires de plus en plus incompatibles avec la mondialisation galopante des échanges. Plus précisément:

Non... L'idéal, ce serait une table unique et géante contenant tous les caractères de toutes les langues de l'Humanité...
Vous en rêviez ? Unicode l'a fait !

ISO-10646 / Unicode: le projet Babel

Au début des 1990, deux organismes se lancent en parallèle dans une entreprise d'envergure au but similaire.
Le premier, et c'est plutôt son rôle, est l'organisme ISO qui, sous le nom de norme ISO-10646, projette de définir un jeu de caractère universel (Universal Character Set) afin de pallier aux limitations inhérentes aux pages de code traditionnelles.

Le logo du consortium Unicode

Dans le même temps, un consortium américain à but non lucratifNon, non, sans rire. baptisé Unicode, entreprend la même aventure, mais avec le souci plus ambitieux de définir également des méthodes normalisées de gestion des écritures et des caractères.

Très vite, heureusement, les deux organismes unissent leurs efforts en acceptant de faire répertoire commun, et en juillet 2006, le consortium américain publie Unicode 5.0, dernière révision majeure de ses travaux.

De fait, contrairement aux précédentes entreprises où l'on tentait, forcément imparfaitement, de faire tenir le plus de caractères utiles dans une table de référence de taille réduite, les projets ISO-10646 et Unicode prenaient le problème à contre-pied, le but principal devenant la définition d'un "abécédaire" le plus exhaustif possible, à charge par la suite de définir des méthodes d'encodage nécessaires à son exploitation.

Les dix commandements Unicode.

Tous les efforts du consortium Unicode concourent à satisfaire les dix principes fondamentaux ci-dessous listés, mais avec le souci constant de ne pas sacrifier la simplicité à l'exhaustivité, et tout en recherchant une compatibilité maximale avec les anciens standards.
Bref, une véritable sinécure...

Une table qui ne manque pas de caractères

Bien évidemment, le fruit le plus spectaculaire et le plus symbolique des travaux du consortium Unicode reste sa table de référence. Celle-ci, en constante évolution...mais en respectant une scrupuleuse compatibilité ascendante, de telle manière que les versions plus anciennes du standard restent compatibles avec la dernière en date. , compile - pour sa dernière version - près de cent mille caractères à chacun desquels sont associés:

Fragment de table Unicode
Point de code
Caractère
Identifiant
U+0034
4
DIGIT FOUR
U+0041
A
LATIN CAPITAL LETTER A
U+00C7
Ç
LATIN CAPITAL LETTER C WITH CEDILLA
U+03A3
GREEK CAPITAL LETTER SIGMA
U+221A
SQUARE ROOT
Quelques exemples de caractères Unicode

La table de référence Unicode se subdivise en différentes parties de taille identique appelées plans...les fameux plans de table.... Le premier d'entre eux, et le plus important, compris entre les points de code U+0000 et U+FFFF constitue le plan multilingue de base (PMB):

Table Unicode: détail du Plan Multilingue de Base.

Cliquez sur les différentes zones du PMB pour accéder à la description des symboles correspondants sur le site officiel du consortium Unicode.

C'est quand même fou le monde qu'il y a sur cette planète...

Points de code Plan Caractéristiques
U+0000 - U+FFFF Plan Multilingue de Base
Le plus complet de tous les plans de la table Unicode, il rassemble la majorité des caractères utilisés dans les principales langues écrites contemporaines.
U+10000 - U+1FFFF Plan Multilingue Supplémentaire
Plan occupé par divers symboles mathématiques et musicaux, et par différentes écritures anciennes (Linéaire B, Perse ancien, Phénicien...)
U+20000 - U+2FFFF Plan Idéographique Supplémentaire
Plan essentiellement occupé par une pléthore d'idéographes unifiés pour les langues chinoise, japonnaise et coréenne.
U+30000 - U+DFFFF Plans inutilisés
Plans dont les points de code n'ont pas (encore) été attribués.
U+E0000 - U+EFFFF Plan Particulier Suppl.
Caractères non graphiques spécialisés.
U+F0000 - U+10FFFF Plans à Usage Privé
Plans A et B réservés à l'usage privé de partis tiers.
Les différents plans du répertoire Unicode.
Les plans de table en détail.

Permettons-nous tout de suite quelques petites réflexions sur ce répertoire universel:

Statistiquement parlant, le répertoire Unicode version 5.0 c'est:

  • Malgré son petit côté révolutionnaire, le répertoire Unicode est bâti sur des fondations plutôt anciennes puisque nous constatons que les 256 premiers points de code (U+0000 - U+00FF) correspondent exactement aux caractères codés par la table de référence ISO 5589-1;
  • Le répertoire est doté d'un certain potentiel: 17 plans de 65.536 codes, soit 1.114.112 points de code disponibles, dont seuls 238.671 (21,4%) déjà assignés;
  • Le standard Unicode a réservé un grand nombre de points de code à un "usage privé"; ces espaces sont mis à disposition des concepteurs d'application, fabricants et autres manufacturiers afin qu'ils puissent y définir leurs propres codes...qui ne feront bien évidemment pas partie du standard proprement dit..

Unicode en pratique

Un répertoire, trois encodages

Bien ! Nous avons jusqu'à présent décrit Unicode comme un excellent standard de description et de manipulation des caractères textuels, mais n'oublions pas que le but de cette page est quand même l'étude du codage binaire du texte, aspect que nous n'avons pas même encore effleuré.
Une chose est sûre: avec plus de 1.100.000 codes différents, ce ne sont pas moins de 21 bits...puisque 20 bits ne permettraient de coder "que" 1.048.576 caractères (220). qui devraient être nécessaires à l'encodage de nos caractères Unicode.

Les tables de référence "pré-Unicode" étaient certes ridiculement exiguës, mais leur encodage ne posait aucun problème, tout code étant inférieur à 256 et, donc, très facilement représentable sous la forme d'un simple octet. Avec Unicode, le problème de l'encodage se corse sérieusement !

Heureusement, le projet Unicode ne s'est pas limité au recensement des caractères du monde, il s'est également penché sur le problème de leur encodage binaire et, à ce titre, a prévu trois principaux formats "transformés", baptisés UTF (Unicode Transformation Format) destinés à adapter Unicode aux multiples situations de la vie quotidienne d'un ordinateur normal.

Bien que très différents dans le résultat qu'ils produisent, ces formats d'encodage partagent tous un principe intangible: tout point de code Unicode doit pouvoir être retrouvé sans ambiguïté à partir de sa version transformée, et cette obligation s'étend également à d'éventuels caractères invalidesAinsi, tout point de code, même s'il correspond à une valeur non attribuée du répertoire, doit être transformé en une séquence telle que ce point de code puisse être exactement retrouvé lors du décodage de la séquence..

Unicode gère (aussi) les oeufs à la coque

Avec le problème de l'encodage des caractères Unicode resurgit une question vieille comme l'octet au pays fantastique des puces savantes, à savoir: "par quel bout entamer ses oeufs à la coque ?"Oui, c'est vrai, la question peut surprendre... Mais tout s'éclaire au bout de ce lien..

De manière un tantinet plus explicite, le problème peut se poser en ces termes: lorsqu'il s'agit de transmettre une donnée binaire composée de plusieurs octets (par exemple 89 AB CD EF) dans un flux de données, comment diable faut-il procéder: doit-on commencer par les octets de poids forts (89-AB-CD-EF) ou par les octets de poids faible (EF-CD-AB-89) ?
La question peut paraître dérisoire mais le fait est que les processeurs n'attendent pas tous les octets de la même manière ! Mieux vaut donc trouver un moyen fiable de s'entendre sur ce point, de telle manière qu'un texte compréhensible le reste, justement, en passant d'une machine à l'autre.

Soucieux de ne surtout pas prendre parti...et, à vrai dire, de rester un standard le plus ouvert possible. dans cette querelle immémoriale, le consortium Unicode propose trois variantes de ses différents formats transformés UTF:

L'encodage au choix

UTF-32: Unicode "no limit"

Pigeon râle

Le format UTF-32 est à la fois le plus simple et le plus gourmand des formats d'encodage de l'Unicode. Le plus simple car ici, tout point de code Unicode est directement codé en sa valeur binaire sur 32 bitsOui, c'est exact qu'en théorie, 21 bits suffiraient largement à coder les 1.114.112 points de code du répertoire, mais l'ordinateur est vraiment très attaché aux octets., l'encodage revenant alors à une simple conversion entre hexadécimal et binaire.

En contrepartie, ce format se révèle également le plus gourmand en ressources puisque chaque caractère, que ce soit un "e" quasi-universel ou un idéogramme médiéval sub-indonésien nécessitera quatre octets pour être codé.

A ce titre, le format UTF-32 est le seul format transformé Unicode pouvant être qualifié d'encodage "à taille constante".
Simple, donc, mais dispendieux !

Précisons, pour être complet, que le BOM UTF-32BE est 00-00-FE-FF, et le BOM UTF-32LE FF-FE-00-00Oui, c'est sûr que si vous avez sauté quelques lignes avant d'atterrir ici, ce genre de phrase peut perturber...

UTF-8: Unicode orienté Internet

Le nom même d'encodage UTF-8 est évocateur puisqu'il vise précisément à sérialiser tout caractère Unicode uniquement à l'aide d'octets: un, deux, trois ou quatre selon le point de code de celui-ci.
L'objectif semble raisonnable: si un seul octet peut suffire à coder un caractère donné, pourquoi s'escrimer à en pondre quatre ? Dans les faits, l'encodage UTF-8 pose néanmoins quelques sérieux problèmes...

Et pourtant ! Il semblerait si simple de convertir des points de code en octets: un point de code compris entre U+0000 et U+00FF serait codé par un seul octet (de 00 à FF) - un point de code compris entre U+0100 et U+FFFF par deux octets (de 01-00 à FF-FF), et ainsi de suite pour les plans supérieurs...
Oui mais voila: le standard Unicode fuit l'ambiguité comme la peste et exige qu'en prenant au hasard un octet dans une séquence codée en UTF-8, on puisse de manière infaillible établir si celui-ci code à lui seul un caractère ou s'il fait partie d'une séquence.
Pfffff... Ça va pas être simple...

Afin de convertir un point de code en octet(s), la norme UTF-8 se sert d'une méthode somme toute pas évidente mais redoutablement efficace, et magistralement mise en lumière par le tableau suivant:
 

Point de code
(notation hexadécimale)
Point de code
(notation binaire)
Séquence UTF-8 correspondante
U+0000 - U+007F 00000000 00000000 0####### 0#######
U+0080 - U+07FF 00000000 00000### ######## 110#####...soit un octet de valeur comprise entre #C2 et #DF, puisque ##### ne peut être 00000 ou 00001 (ou alors, le caractère appartiendrait à l'intervalle U+0000-U+007F) 10######...soit un octet de valeur comprise entre #80 et #BF.
U+0800 - U+D7FF...l'espace U+D800-U+DFFF étant réservé aux zones d'indirection, et donc lié à aucun point de code "utile".
U+E000 - U+FFFD
00000000 ######## ######## 1110####...soit un octet de valeur comprise entre #E0 et #EF. 10######...soit un octet de valeur comprise entre #80 et #BF. 10######...soit un octet de valeur comprise entre #80 et #BF.
U+10000 - U+10FFFF 000##### ######## ######## 11110###...soit un octet de valeur comprise entre #F0 et #F4. 10######...soit un octet de valeur comprise entre #80 et #BF. 10######...soit un octet de valeur comprise entre #80 et #BF. 10######...soit un octet de valeur comprise entre #80 et #BF.
Encodage UTF-8 des points de code Unicode.

Chaque petit "#" symbolise un bit de valeur quelconque.

Comme d'habitude, petit décryptage de tableau sibyllin:

  • De par le mécanisme d'encodage UTF-8, il est facile de constater qu'un texte au format ASCII est de facto un texte au format UTF-8, mais, bien évidemment, l'inverse n'est absolument pas vrai.
  • Les bits les plus significatifs du premier octet d'une séquence donnent la longueur de la séquence: 110 pour une séquence de deux octets, 1110 pour une séquence de trois octets, 11110 pour une séquence de quatre octets.
  • Tout octet dont les deux bits les plus significatifs sont "10"...c'est-à-dire un octet de valeur comprise entre #80 et #BF. est un octet appartenant à une séquence.
  • De par l'algorithme de transformation UTF-8, il est normalement impossible de trouver dans une séquence UTF-8 un octet égal à C0, C1, F5, F6, F7, F8, F9, FA, FB, FC, FD, FE ou FF.

Le principal avantage du format UTF-8 tient dans sa compacité, quasi parfaite..."quasi" de par les exigences du standard vis-à-vis de la non-ambiguité des séquences., qui en fait un format idéal dans le contexte en plein boom des télétransmissions informatiquesAucune surprise, donc, en apprenant que le format UTF-8 est le format d'encodage par défaut des documents XML..
La contrepartie est plus insidieuse car un caractère pouvant être codé par un nombre variable d'octets, les routines de manipulation de chaînes...à savoir calcul de longueur, extraction, tri et le toutim... sont rendues sensiblement moins rapides.

UTF-16: Unicode orienté OS

Il est évident que parmi tous les caractères recensés par le standard Unicode, ceux appartenant au Plan Multilingue de Base s'avèrent, et de loin, les plus usités. Or, les caractères du PMB s'étendant entre U+0000 et U+FFFF, deux octets pourraient suffire à coder la totalité d'entre eux.
De ce constat limpide est né le principe du codage UTF-16, qui vise simplement à décomposer les caractères Unicode en seizetJoli mot, non ?
Plus joli en tout cas que "séquence de seize bits"...
binaire.

Mais les pointilleux se trémoussent déjà ! Et les caractères situés hors du PMB ? Les zapperait-on dans la joie ? Du tout, du tout: on continue de les coder, mais cette fois sous forme de deux seizets appelés seizets d'indirection (surrogate pairs en Grand-Breton).

A l'image du format UTF-8, le consortium Unicode a conçu son encodage UTF-16 de telle manière que les seizets d'indirection ne prêtent à aucune équivoque. En ce sens, l'éventail des valeurs possibles pour un seizet simple est complètement disjoint de l'éventail des valeurs possibles pour chacun des deux seizets d'indirection.

En termes beaucoup plus clairs, tout caractère situé hors du PMB sera encodé par deux seizets d'indirection: un premier, obligatoirement compris entre les valeurs D800 et DBFF, et un second, tout aussi obligatoirement compris entre les valeurs DC00 et DFFF, l'espace U+D800 - U+DFFF du PMB n'étant par définition attribué à aucun caractère.
La conséquence de ce mode d'encodage est heureuse: si, en consultant une séquence de caractères encodée au format UTF-16, vous trouvez un seizet:

  • Compris dans les intervalles 0000-D7FF ou E000-FFFF, c'est qu'il s'agit obligatoirement d'un seizet codant un caractère du PMB;
  • Compris dans l'intervalle D800-DBFF, c'est qu'il s'agit obligatoirement du premier seizet d'un caractère situé hors du PMB, qui doit donc être obligatoirement suivi par un seizet compris entre DC00-DFFF;
  • Compris dans l'intervalle DC00-DFFF, c'est qu'il s'agit obligatoirement du second seizet d'un caractère situé hors du PMB, qui doit donc être obligatoirement précédé par un seizet compris entre D800-DBFF.

Le format UTF-16 semble donc un excellent compromis entre la lourdeur du format UTF-32 et la relative complexité du format UTF-8. Cet équilibre heureux fait de UTF-16 le format choisi par de nombreux systèmes d'exploitation...et notamment Windows, depuis sa version NT. pour leur représentation interne des chaînes de caractères.

Précisons ici aussi, toujours pour être complet, que le BOM UTF-16BE est FE-FF, et le BOM UTF-16LE FF-FEMême cause, même conséquence que plus haut...
 

Les formats transformés Unicode UTF-8, UTF-16 et UTF-32

Cliquez sur les chiffres du point de code pour modifier sa valeur et constater la valeur conséquente des différents formats d'encodage Unicode.


Enfin bref...

Bien ! Il semble qu'un ordinateur puisse, de manière laborieuse mais apparemment fiable, manipuler du texte, qui plus est dans toutes les langues connues de la planète.

Conservons quand même notre Remington sous le coude, juste au cas où le régime des retraites à EDF serait menacé...

Pour aller plus loin...

Feed-back: exprimez-vous !

Arcana est un site gratuitSa version payante ayant conduit trois comptables à la dépression.... De fait, vos messages chaleureux et enthousiastes constituent la principale motivation de son auteur à tenter de le faire vivre.
Néanmoins, toutes les vérités sont bonnes à dire et ce formulaire est donc également destiné à recevoir vos doléances et vos remarques, ainsi que vos questions, vos rapports de bugs, et, par dessus tout, vos précieux conseils et correctifs.

Merci.

Notes techniques

Ce site a été testé sous environnement Windows avec les deux navigateurs les plus populaires du moment, à savoir Internet Explorer 7 et Firefox 2.
Tout avait l'air de fonctionner à peu près.

Il est vrai qu'aucun effort supplémentaire de compatibilité avec d'autres navigateurs n'a été entrepris, le nirvana du cross-browsing réclamant tout à la fois une patience d'ange, une méticulosité d'horloger et, paramètre non négligeable, un certain bol de cocu, toutes qualités dont ne dispose pas l'auteur de ce site.

Afin que Arcana puisse à peu près correctement fonctionner sur votre machine, votre navigateur doit autoriser l'exécution des scripts JavaScript et également disposer du plugin Adobe FlashPlayer.

En effet, la plupart des somptueuses animations disséminées sur ce site ont été réalisées avec le logiciel Adobe Flash©. Télécharger FlashPlayer Si votre ordinateur ne dispose pas du petit programme permettant de lire ce format, vous ne pourrez visualiser ces animations.
Heureusement, il vous suffit pour remédier à cette terrible injustice de cliquer sur ce logo ci-contre afin de télécharger le "plugin" qui vous permettra de découvrir enfin ces petits chefs-d'oeuvre d'art naïf (ainsi que, par la suite, toute page Internet recourant à cette technologie).
La procédure est indolore, rapide et gratuite, alors pourquoi s'en priver, je vous le demande ?

Arcana recherche...

Quoique l'auteur de ce site dispose d'une petite expérience et d'un nanodiplôme en sciences informatiques, il n'est malheureusement titulaire d'aucun permis d'enseigner validé par l'Académie. Dès lors, et bien que tout ait été mis en oeuvre afin de ne pas propager de trop grossières erreurs sur ces pages, il manque à Arcana ce qui lui donnerait tout à la fois poids et respectabilité, à savoir une autorité scientifique, auréolée d'un cursus en règle et du crédit de l'Université.
Si une ou plusieurs sommités venant à croiser ce site acceptaient d'endosser cette écrasante responsabilité de caution intellectuelle pour une ou plusieurs leçons, elles seraient grandement remerciées et leur nom bien évidemment gravé en lettres d'or en tête de page, leur assurant par là même gloire et renommée quasi planétaires.

Un sens du dépouillement et d'humilité artistique qui confine au déprimant...Par ailleurs, les spécialistes l'auront remarqué, Arcana se pare d'un graphisme rococo et luxuriant directement inspiré par l'école est-allemande des années 70.
De fait, quiconque n'a jamais eu à concevoir ex nihilo un simple bouton d'interface ne peut comprendre à quel point l'infographie est un métier à part entière. L'auteur de ce site ayant, suite à un très long face-à-face avec Photoshop, découvert son absence totale de don dans ce domaine très artistique, toute aide serait la bienvenue pour offrir à Arcana une charte graphique digne de ce nom.

De la même manière, quelques laborieux petits dessins pseudo-humoristiques viennent ça et là agrémenter le contenu parfois franchement hostile de certaines leçons. Si, vous aussi, vous tenez à participer à cette courageuse entreprise de dépénibilisation de l'écrit pédagogique, vos bulles originales seront les bienvenues et, légitimement signées, contribueront au fantastique rayonnement humaniste et artistique d'Arcana.

D'avance, merci.

Plan de la leçon