Le codage ASCII
Le code ASCII est l'un des plus anciens codes utilisés pour représenter du texte
en informatique. ASCII signifie (American Standard Code for Information ...
part of the document
Le codage numérique du texte
Sources : Wikipédia
Da ASCII code !
En informatique, chaque caractère est identifié par un code unique qui est un entier naturel. La correspondance entre le caractère et son code est appelé un Charset. Mais un code nest pas utilisable tel quel par un ordinateur qui ne comprend que le binaire. Il faut donc encoder les codes en octets (Encoding).
Le code HYPERLINK "http://fr.wikipedia.org/wiki/American_Standard_Code_for_Information_Interchange" \o "ASCII (page inexistante)"ASCII est l'un des plus anciens codes utilisés pour représenter du texte en informatique. ASCII signifie (American Standard Code for Information Interchange).
Il se base sur un tableau contenant les caractères les plus utilisés en langue anglaise : les lettres de l'alphabet en majuscule (de A à Z) et en minuscule (de a à z), les dix chiffres arabes (de 0 à 9), les signes de ponctuation (point, virgule, point-virgule, guillemet, parenthèses, etc.), quelques symboles et certains caractères spéciaux invisibles (espace, retour-chariot, tabulation, retour-arrière, etc.).
Les créateurs de ce code ont limité le nombre de ses caractères à 128, c'est-à-dire 27, pour qu'ils puissent être codés avec seulement 7 bits : les ordinateurs utilisaient des cases mémoire de un octet, mais ils réservaient toujours le 8e bit pour le contrôle de parité (c'est une sécurité pour éviter les erreurs, qui étaient très fréquentes dans les premières mémoires électroniques).
Exemple : Le caractère A est codé en ASCII par le nombre 65 (dans notre système décimal habituel), qui correspond en binaire au nombre 1000001.
Chaque caractère d'un texte codé en ASCII occupe alors un octet.
Un texte de 5000 caractères occupe donc 5 ko.
Activités : La phrase : « Enfin ! Je peux taider à comprendre ce qui sest passé. » a une taille de 55 octets (il faut compter les espaces, l'apostrophe, le point final ...).
L'expérience peut être faite en utilisant un éditeur de texte quelconque comme le bloc-notes de Windows, TextEdit sous OSX ou encore kwrite, geany sous Linux. Il suffit d'écrire le texte, puis de l'enregistrer en tant que « texte brut » (le plus souvent avec une extension .txt) et ensuite de vérifier la taille en octets du fichier obtenu (ce qui peut se faire en cliquant d'abord avec le bouton droit sur l'icône du fichier puis sur "Propriétés"). On peut écrire la même chose dans un logiciel de traitement de texte (comme LibreOffice Writer ou Microsoft Word) et se rendre compte que la taille du fichier obtenu nest pas du tout la même. Y a-t-il une explication ?
............................................................................................................................................................................
A laide de la table ASCII située à la fin de ce document, coder en binaire la phrase suivante :
« Lan qui vient ! »
............................................................................................................................................................................
............................................................................................................................................................................
Voici maintenant une exclamation codée en binaire : 01000010 01110010 01100001 01110110 01101111 00101100
Retrouver cette exclamation :............................................................................................................................
Peut-on coder en binaire la phrase « Un âne est-il passé par là ? » à laide de la table ? (Justifier la réponse) :
............................................................................................................................................................................
Il va donc falloir étendre la table ASCII pour pouvoir coder les nouveaux caractères. Les mémoires devenant plus fiables et, de nouvelles méthodes plus sûres que le contrôle de parité ayant été inventées, le 8ième bit a pu être utilisé pour coder plus de caractères. Combien le fait davoir 8 bits amène-t-il de nouvelles possibilités ?.......................................................................................................................................
On élimine ainsi l'inconvénient très gênant de ne coder que les lettres non accentuées, ce qui peut suffire en anglais, mais pas dans les autres langues (comme le français et l'espagnol par exemple). On a pu aussi rajouter des caractères typographiques utiles comme des tirets de diverses tailles et sortes.
Par exemple, en français les caractères é, è, ç, à, ù, ô, æ, , sont fréquemment utilisés alors quils ne figurent pas dans la table ASCII.
De la difficulté de convenir dune norme...
Le fait dutiliser un bit supplémentaire a bien entendu ouvert des possibilités mais malheureusement tous les caractères ne pouvaient être pris en charge. La norme HYPERLINK "http://fr.wikipedia.org/wiki/ISO_8859-1"ISO 88591 appelée aussi Latin-1 ou Europe occidentale est la première partie dune norme plus complète appelée ISO 8859 (qui comprend 16 parties) et qui permet de coder tous les caractères des langues européennes. Cette norme ISO 88591 permet de coder 191 caractères de lalphabet latin qui avaient à lépoque été jugés essentiels dans lécriture. Par exemple la lettre ny figure pas.
Dans les pays occidentaux, cette norme est utilisée par de nombreux systèmes dexploitation, dont UNIX, Windows. Elle a donné lieu à quelques extensions et adaptations, dont HYPERLINK "http://fr.wikipedia.org/wiki/Windows-1252" \o "Windows-1252"Windows-1252 (appelée ANSI) et HYPERLINK "http://fr.wikipedia.org/wiki/ISO_8859-15" \o "ISO 8859-15"ISO 8859-15 (qui prend en compte le symbole ¬ créé après la norme ISO 8859-1). C est source de grande confusion pour les développeurs de programmes informatiques car un même caractère peut être codé différemment suivant la norme utilisée.
Voici deux tableaux :
Un petit logiciel : HYPERLINK "http://nickciske.com/tools/binary.php"http://nickciske.com/tools/binary.php
Le code binaire dun texte : 01000010 01110010 01100001 01110110 01101111 00101100 00100000 01110100 01110101 00100000 01100001 01110011 00100000 01110000 01110010 01100101 01110011 01110001 01110101 01100101 00100000 01110100 01101111 01110101 01110100 00100000 01110100 01110010 01101111 01110101 01110110 11101001 00101110 00101110 00101110
A laide du logiciel, retrouver le texte contenu dans le code :..........................................................................
Peut-on dire si ce logiciel utilise la norme ISO 8859 ou la norme Windows 1252 ? (Justifier la réponse)
............................................................................................................................................................................
Trouver une astuce pour savoir laquelle des deux est utilisée ! Cest la norme : ............................................
Quand le net saffole...
Nous avons tous un jour reçu un courriel bizarre ou lu une page web telle que celle-ci :
Bien que ceci soit de moins en moins fréquent (nous comprendrons pourquoi), on trouve parfois des phrases dans lesquelles certains caractères sont remplacés par dautres qui nont rien à voir et qui empêchent la lecture et la compréhension du texte. Il sagit ici dun problème dencodage et de décodage. La personne qui écrit le texte utilise une norme différente de celle utilisée par celui qui le lit ! Lorsque cest un courriel on a la plupart du temps affaire à un spam venant de létranger, ce nest pas sans raison...
Et lUnicode vint...
Bien entendu, il ny a pas que les langues européennes qui existent, et la généralisation de lutilisation dInternet dans le monde et des échanges interculturels a nécessité une prise en compte dun nombre beaucoup plus importants de caractères décriture (par exemple le mandarin possède plus de 5000 caractères !). De plus certaines confusions étaient possibles comme par exemple lorsquétait prévu un caractère « signe monétaire », le même texte autorisant aux États-Unis une dépense en dollars pouvait une fois transmis par courrier électronique au Royaume-Uni autoriser la même dépense en livres sterling, sans que quoi que ce soit ait été modifié au texte... La norme Unicode a été créée pour permettre le codage de textes écrits quelque soit le système décriture utilisé. On attribue à chaque caractère un nom, une position normative et un bref descriptif qui seront les mêmes quelque soit la plate-forme informatique ou le logiciel utilisés. Un HYPERLINK "http://www.unicode.org/"consortium composé dinformaticiens, de chercheurs, de linguistes, de personnalités du monde de la politique... soccupe donc dunifier toutes les pratiques en un seul et même système : lUnicode.
LHYPERLINK "http://fr.wikipedia.org/wiki/Unicode"Unicode est une table de correspondance Caractère-Code (Charset), et lHYPERLINK "http://fr.wikipedia.org/wiki/UTF-8"UTF-8 est lencodage correspondant (Encoding) le plus répandu. Maintenant, par défaut, les navigateurs Internet utilisent le codage UTF-8 et les concepteurs de sites pensent de plus en plus à créer leurs pages web en prenant en compte cette même norme. Voilà pourquoi il y a de moins en moins de problèmes de compatibilité.
Une petite expérience :
Ouvrez un navigateur Internet comme Firefox, Internet Explorer, Safari ou Opéra. Dans la barre doutils du premier on peut voir à « Affichage », « Encodage des caractères » que cest lUTF-8 qui est sélectionné par défaut. Changeons ceci et sélectionnons Europe Occidentale (Windows). Les petits caractères désagréables apparaissent. Que sest-il passé ? En allant dans « Outils », « Informations sur la page », on voit que cette page est encodée en UTF-8. Lorsque le lecteur est lui aussi en UTF-8 tout va bien. Dès quon change le paramètre du lecteur (ici, le navigateur), des incompatibilités apparaissent.
En utilisant Internet Explorer, et en allant dans « Affichage », « Source », on obtient ceci :
On peut lire lentête de la page html visitée avec notamment à la ligne 7 la précision de lencodage de cette page qui est en UTF-8.
On peut aussi dans « Affichage », « Codage », sélectionner Grec (ISO) et se rendre compte en lisant le texte, que le « à » a été remplacé par un « L » à lenvers dit Gamma.
Une autre petite expérience :
Sous Windows aller dans « Démarrer », « Exécuter », taper « charmap ». Cocher « Affichage avancé », sélectionner « Windows Occidental » (cest à peu de choses près lISO 8859-1) dans « Jeu de caractères » regarder le nombre de caractères proposés, puis sélectionner « Unicode ». Il y a maintenant un très grand nombre de caractères disponibles, beaucoup de langues sont représentées. Sous Linux on pourra utiliser « gucharmap », et pour OSX (Apple) il faut chercher le « palette de caractères ».
Quelques précisions sur lUTF-8
Lencodage UTF-8 utilise 1, 2, 3 ou 4 octets en respectant certaines règles :
Un texte en ASCII de base (appelé aussi US-ASCII) est codé de manière identique en UTF-8. On utilise un octet commençant par 0.
Les octets ne sont pas remplis entièrement. Les bits de poids fort du premier octet forment une suite de 1 indiquant le nombre doctets utilisés pour coder le caractère. Les octets suivants commencent tous par 10.
Dans la norme ISO 8859-1 le « é » est codé 1110 1001, en UTF-8 on le codera 11000011 10101001. On pourra remarquer deux choses : le codage ISO sinscrit dans le codage UTF-8, on a comblé le premier octet avec des zéros (en italique).
Exercice :
Le symbole ¬ correspond à la valeur décimale 8364.
Convertir cette valeur en binaire :...................................................................................................
Combien d octets doit-on utiliser en UTF-8 pour coder ce nombre convenablement (les moitiés doctet sont interdites) ?..................................................................................................................
Donner le codage UTF-8 correspondant :.........................................................................................
Quelques remarques :
Ce codage permet de coder tous les caractères de la norme Unicode.
Les caractères Unicode sont la plupart du temps représentés en hexadécimal. Cest un moyen de simplifier lécriture en binaire qui devient lourde lorsquon manipule plusieurs octets. Il sagit de la base 16 ce qui signifie que lon a besoin de 16 symboles : 0 1 2 3 4 5 6 7 8 9 A B C D E F.
A représentant 10, B, 11... Pour passer du binaire à lhexadécimal, rien de plus simple, on fait des paquets de quatre bits que lon représente par un des 16 symboles.
Par exemple : 1110 1001 qui est le code binaire du é en ISO 8859-1 devient E916 (lindice signifie que lon est en base 16) ce que lon peut retrouver dans le tableau donné plus haut. Il faut noter que la notation en binaire est très peu utilisée sauf pas les électroniciens et par ceux qui travaillent en langage machine.
Le système de codage UTF-8 permet dencoder un même caractère de plusieurs manières. Ceci peut poser un problème de sécurité car un programme détectant certaines chaînes de caractères (pour contrer des injections dans les bases de données par exemple), sil est mal écrit, pourrait alors accepter des séquences nuisibles. En 2001 un virus a attaqué des serveurs http du web.
Par exemple, le symbole ¬ pourrait être codé sur 4 octets (forme super longue) de la manière suivante : 11110000 10000010 10000010 10101100. Si elle n est pas rejetée ou remise sous forme standard ce codage ouvrira une brèche potentielle de sécurité par laquelle on pourra faire passer un virus.
Quel est le nombre maximal de caractères que lon peut encoder grâce à lUTF-8 lorsquon utilise les quatre octets?........................................
Voici un site très utile à consulter sans modération en complément de ceux proposés en liens :
Arcanapercipio HYPERLINK "http://www.arcanapercipio.com/lessons/codage_binaire_du_texte/codage_binaire_du_texte.html"[1] HYPERLINK "http://www.arcanapercipio.com/lessons/l_information_binaire/l_information_binaire.html"[2]DécimaleBinaireValeurExplication00000000000NUL NULL Character00100000001SOH Start of Header00200000010STX Start of Text00300000011ETX End of Text00400000100EOT End of Transmission00500000101ENQ Enquiry00600000110ACK Acknowledgement00700000111BEL Bell00800001000BS Backspace00900001001HT Horizontal Tab01000001010LF Line Feed01100001011VT Vertical Tab01200001100FF Form Feed01300001101CR Carriage Return01400001110SO Shift Out01500001111SI Shift In01600010000DLE Data Link Escape01700010001DC1 Device Control 1 (XON)01800010010DC2 Device Control 201900010011DC3 Device Control 3 (XOFF)02000010100DC4 Device Control 402100010101NAK Negative Acknowledgement02200010110SYN Synchronous Idle02300010111ETB End of Transmission Block02400011000CAN Cancel02500011001EM End of Medium02600011010SUB Substitude02700011011ESC Escape02800011100FS File Separator02900011101GS Group Separator03000011110RS Record Separator / Request to Send03100011111US Unit Separator03200100000SP Space03300100001! exclamation mark03400100010" Double quote03500100011# Number sign / hash sign03600100100$ Dollar sign03700100101% Pourcent03800100110& Ampersand03900100111' Simple quote04000101000( Left parenthesis / Opening parenthesis04100101001) Right parenthesis / Closing parenthesis04200101010* Asterisk04300101011+ Plus04400101100, Comma04500101101- Minus / Dash04600101110. Dot04700101111/ Forward slash048001100000 049001100011 050001100102 051001100113 052001101004 053001101015 054001101106 055001101117 056001110008 057001110019 05800111010: Colon05900111011; Semi-colon06000111100 Greater than06300111111? Question mark06401000000@ AT symbol06501000001A 06601000010B 06701000011C 06801000100D 06901000101E 07001000110F 07101000111G 07201001000H 07301001001I 07401001010J 07501001011K 07601001100L 07701001101M 07801001110N 07901001111O 08001010000P 08101010001Q 08201010010R 08301010011S 08401010100T 08501010101U 08601010110V 08701010111W 08801011000X 08901011001Y 09001011010Z 09101011011[ Left bracket / Opening bracket09201011100\ Back slash09301011101] Right bracket / Closing bracket09401011110^ Caret / Circumflex09501011111_ Underscore09601100000` Back quote09701100001a 09801100010b 09901100011c 10001100100d 10101100101e 10201100110f 10301100111g 10401101000h 10501101001i 10601101010j 10701101011k Gefyz{é) 0 ¹ Á Ä Å Í Î G
H
M
N
¢
£
Æ
å
ç
è
-?FMS[§ÂÍìã×ãÎÂã×·¯£¯£¯·wwk×````h_s°h_s°OJQJh¿UÐh_s°5OJQJh_s°OJQJhkGIh_s°0JOJQJh¦7¡jh¦7¡UhkGIh_s°OJQJh>4¬h>4¬5OJQJh>4¬OJQJh>4¬h>4¬OJQJh Fh_s°6OJQJh_s°6OJQJhkGIh_s°5OJQJh_s°5OJQJ%jh¦7¡5OJQJUmHnHu%efz{Ä Å è
ܼ[÷òêòòòââÚÒÒÒÃÃÁµ¦¡gd³Jõ$¤