• Aucun résultat trouvé

Codage des caractères

N/A
N/A
Protected

Academic year: 2022

Partager "Codage des caractères"

Copied!
7
0
0

Texte intégral

(1)

Objectifs pédagogiques :

✓ Identifier l’intérêt des différents systèmes d’encodage

✓ Convertir un fichier texte dans différents formats d’encodage.

Nous savons qu'un ordinateur est uniquement capable de traiter des données binaires : comment sont donc codés les textes dans un ordinateur ? Ou plus précisément, comment sont codés les caractères dans un ordinateur ?

Problématique : des caractères bizarres dans un texte !

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 d’autres (appelés mojibake) qui n’ont rien à voir et qui empêchent la lecture et la compréhension du texte. Il s’agit ici d’un problème d’encodage 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 c’est un courriel on a la plupart du temps affaire à un spam venant de l’étranger, ce n’est pas sans raison...

Du code ASCII au code ASCII étendu (ISO 8859-1 ou Latin-1)

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 n’est pas utilisable tel quel par un ordinateur qui ne comprend que le binaire. Il faut donc encoder les codes en octets (Encoding).

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 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)10 = (41)16 = (1000001)2

Codage des caractères 01110 </>

aAbB

cCdD

(2)

Chaque caractère d'un texte codé en ASCII occupe alors un octet. Ainsi, Un texte de 5000 caractères occupe donc 5 ko.

Exemple : La phrase : « Enfin ! Je peux t’aider à comprendre ce qui s’est passé. » a une taille de 56 octets (il faut compter les espaces, l'apostrophe, le point final ...).

Document 1 : la norme ASCII

Q1. Quel est le code binaire ASCII du « b » minuscule et du « B » majuscule ? Q2. Codez avec la norme ASCII la phrase suivante en binaire : « L’an qui vient ! »

Q3. Dans le Bloc Note de Windows ©, enregistrez un fichier texte au format ANSI dont le contenu est la phrase : Enfin ! Je peux t’aider à comprendre ce qui s’est passé.

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"). La même phrase occupe-t-elle la même taille si on l’enregistre dans un fichier issu d’un traitement de texte (LibreOffice Writer © ou Microsoft Word © par exemple) ? Y-a-t-il une explication à cela ? Q4. Retrouvez l’exclamation suivante codée en binaire : (01000010 01110010 01100001 01110110 01101111 00101100)2.

Convertisseur décimal, hexadécimal, binaire en ligne.

Q5. Peut-on coder en binaire la phrase « Un âne est-il passé par là ? » à l’aide de la table ASCII ? Justifiez.

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.

Q6. Combien le fait d’avoir 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.

(3)

Par exemple, en français les caractères é, è, ç, à, ù, ô, ï, î, ë, æ, œ, sont fréquemment utilisés alors qu’ils ne figurent pas dans la table ASCII.

De la difficulté de convenir d’une norme…

Le fait d’utiliser 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 ISO 8859–1 appelée aussi Latin-1 ou Europe occidentale (ou encore ASCII étendu) est la première partie d’une 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 8859–1 permet de coder 191 caractères de l’alphabet latin qui avaient à l’époque été jugés essentiels dans l’écriture. Par exemple la lettre œ n’y figure pas.

Dans les pays occidentaux, cette norme est utilisée par de nombreux systèmes d’exploitation, dont UNIX, Windows.

Elle a donné lieu à quelques extensions et adaptations, dont Windows-1252 (appelée ANSI) et 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 tables de caractères ISO 8859-1 et Windows-1252 :

Q7. A l’aide de ce logiciel, retrouver le texte contenu dans le code binaire suivant :

(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)2

Q8. Peut-on dire si ce logiciel utilise la norme ISO 8859-1 ou la norme Windows-1252 ? (Justifier la réponse) Q9. Trouvez une astuce pour savoir laquelle des deux est utilisée !

Et l’Unicode vint…

Bien entendu, il n’y a pas que les langues européennes qui existent, et la généralisation de l’utilisation d’Internet dans le monde et des échanges interculturels a nécessité une prise en compte d’un 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

(4)

pour permettre le codage de textes écrits quel que 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 quel que soit la plate-forme informatique ou le logiciel utilisés.

Un consortium composé d’informaticiens, de chercheurs, de linguistes, de personnalités du monde de la politique... s’occupe donc d’unifier toutes les pratiques en un seul et même système : l’Unicode.

Le répertoire Unicode peut contenir plus d’un million de caractères, ce qui est bien trop grand pour tenir dans un seul octet. La norme Unicode définit donc des méthodes standardisées pour coder et stocker cet index sous forme de séquences d’octets : UTF-8 (8 bits), UTF-16 (16 bits), UTF-24 (24 bits), UTF-32 (32 bits) et leurs différentes variantes.

L’Unicode est une table de correspondance Caractère-Code (Charset), et l’UTF-8 est l’encodage 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é.

L’encodage UTF-8 utilise 1,2,3 ou 4 octets en respectant certaines règles :

• Un caractère déjà codé en ASCII de base est codée de manière identique en UTF-8 :

Valeur Unicode Code UTF-8

Caractère Décimale Binaire Binaire Hexadécimal

A 65 01000001 01000001 41

• Pour les caractères qui n’existent pas en ASCII, les bits de poids fort du premier octet forment une suite de 1 indiquant le nombre d’octets utilisés pour coder le caractère suivi d’un 0. Les octets suivants commencent tous par le bloc binaire 10 :

Valeur Unicode Code UTF-8

Caractère Décimale Binaire Binaire Hexadécimal

é 233 00011 101001 11000011 10101001 C3 A9

€ 8364 0010 000010 101100 11100010 10000010 10101100 E2 82 AC

Remarques :

Le système de codage UTF-8 permet d’encoder potentiellement 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), s’il est mal écrit, pourrait alors accepter des séquences nuisibles.

En 2001 un virus a attaqué des serveurs http du web en exploitant cette faille.

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.

Les caractères Unicode sont la plupart du temps représentés en hexadécimal. C’est un moyen de simplifier l’écriture en binaire qui devient lourde lorsqu’on manipule plusieurs octets.

Document 2 : la norme Unicode et l’UTF-8

(5)

Q10. Ouvrir un navigateur internet (Chrome, Firefox …) et consulter la page web du site du lycée : http://www.lyc- stex-mantes.ac-versailles.fr/ . Faire un clic droit n’importe où sur la page et choisir « Afficher le code source de la page » sous Google Chrome © ou « Code source de la page sous Mozilla Firefox © ». Quelle balise HTML permet de connaître le format d’encodage des caractères de la page web consultée ?

Q11. Rendez-vous sur le site de jeux vidéo japonais suivant : https://bandainamco-am.co.jp/ . Les caractères japonais s’affichent-ils correctement dans votre navigateur ? Pour quelle raison ? Google Chrome © offre même la possibilité de traduire la page : testez !

Q12. Sous Windows aller dans « Démarrer », « Exécuter », taper « charmap » puis appuyer sur la touche « ENTER ».

Quelle est la table de caractères utilisée par défaut par le système d’exploitation ? Cette table de caractères possède- t-elle moins ou plus de caractères que celle nommée « Windows : Occidental » qui correspond à peu de chose près à l’ISO 8859-1 ?

Q13. A l’aide de la table des caractères Unicode de Windows accessible en tapant « charmap » puis en appuyant sur la touche « ENTER » dans le menu « Exécuter», trouver la valeur décimale xxxx de la lettre « à ». Il suffit pour cela de regarder en bas à droite de la boîte de dialogue l’intitulé « Frappe : Alt + xxxx ». Convertir cette valeur en binaire.

Combien d’octets doit-on utiliser en UTF-8 pour coder ce nombre convenablement (les moitiés d’octet sont interdits).

Donner le codage UTF-8 correspondant.

Manipulation de fichiers « texte » avec un éditeur hexadécimal

◼ Ouvrir le « Bloc-Notes » de Windows ©.

• Ecrire la phrase : Voilà du texte.

ATTENTION : ne pas appuyer sur « ENTER » après le point).

• « Enregistrer sous » votre fichier texte dans un sous-dossier de « Mes documents » sous différents formats d’encodage de caractères (ANSI, UTF-16LE, UTF-16BE, UTF-8). On donnera les noms respectifs suivants aux fichiers : testANSI.txt ; testUTF16LE.txt ; testUTF16BE.txt ; testUTF8.txt

Remarque : ANSI correspond à l’encodage Windows-1252, UTF8 à l’encodage Unicode UTF-8, UTF-16LE à l’encodage Unicode Little Endian, UTF-16BE à l’encodage Unicode Big Endian.

Q14. En ASCII, qu’elle est la taille que devrait théoriquement occuper ce fichier ? Q15. Tous ces fichiers contiennent la même phrase. Ont-ils la même taille ? Expliquez.

En Unicode, l'indicateur d'ordre des octets ou BOM (pour l'anglais Byte Order Mark) est une donnée qui indique l'utilisation d'un encodage Unicode ainsi que l'ordre des octets, généralement situé au début de certains fichiers texte.

Encodage Séquence d’octets du BOM UTF-8 EF BB BF

UTF-16 LE FF FE UTF-16 BE FE FF

Le standard Unicode n'impose pas l'indicateur d'ordre des octets en début de flux de données Unicode, mais le permet. C'est le cas en particulier pour UTF-8, où l'indicateur BOM est facultatif et n’est donc pas encodé par la plupart des traitements de texte.

Document 3 : le BOM (Byte Order Mark) de l’Unicode

(6)

◼ Ouvrir dans différents onglets de NotePad++. les fichiers textes précédents (testANSI.txt ; testUTF16LE.txt ; testUTF16BE.txt ; testUTF8.txt). Il est également possible d’utiliser un éditeur hexadécimal en ligne tels que https://hexed.it/ ou https://hex-works.com/eng

◼ Rendez-vous dans le menu Modules d’extension > HEX-Editor > View in HEX de Notepad++ afin d’afficher le code hexadécimal des différents fichiers « texte » encodés précédemment.

Remarque : dans NotePad++ , le plugin HEX-Editor doit être préalablement installé. Pour installer cette extension le cas échéant, rendez-vous dans le menu Modules d’extension > Gestionnaire des modules d’extension…

Q16. Parmi les fichiers testANSI.txt ; testUTF16LE.txt ; testUTF16BE.txt ; testUTF8.txt, quels sont ceux possédant un BOM ?

◼ Ouvrir le Bloc Notes de Windows ©.

◼ Pour chacun des caractères suivants : à é è € , enregistrez un fichier texte encodé en UTF8. Chaque fichier contiendra un caractère unique (ne pas appuyer sur « ENTER » après la lettre).

Q17. A l’aide de NotePad++ retrouvez le codage hexadécimal des lettres « à » « é » « è » « € » en UTF-8. En déduire leur codage décimal. Vérifiez vos résultats avec la table Unicode UTF8 .

◼ Ouvrir le Bloc Notes de Windows ©.

◼ Créez un fichier texte regroupant sur 4 lignes suivantes : Prénom NOM

Classe

Lycée Saint-Exupéry 78200 Mantes-la-Jolie

◼ Enregistrez le fichier au format ANSI (Windows-1252)

Q18. Faire une copie d’écran du contenu du fichier texte affiché en hexadécimal. Noter le code des caractères de contrôle qui permettent de réaliser :

• un espace ;

• un saut de ligne ;

• un retour de chariot.

(7)

Q19. Que signifient les acronymes : ESC ? DEL ? CR ? LF ? Q20. Décoder le texte ci-dessous encodé au format ANSI.

En informatique, un octet est un multiplet de 8 bits codant une information. Cette information peut, par exemple, être un entier ou un caractère simple.

Références

Documents relatifs