Cours code ASCII.
Réponse AJAX

Objectif...

L'ordinateur ne manipule que des chiffres. Il existe donc une (et même plusieurs) table d'équivalence entre les chiffre et les caractères alphanumérique que nous lisons.

En tant que professionnel de l'informatique, il est utile de comprendre ces tables (sans qu'il soit nécessaire de les apprendre par cœur).

Le code ASCII

Généralités

L'ordinateur ne stockant que des nombres, on a créé une table d'équivalence entre les nombres et les caractères. Cette table s'appelle la table ASCII (American Standard Code for Information Interchange).

Dans la table ASCII, le codage est fait sur 7 bits (soit un octet moins un bit). Longtemps, le 8ème bit a servi de bit de parité pour vérifier l'intégrité du signal.

Voici la table ASCII, où en colonne on a le chiffre de poids fort et en ligne le chiffre de poids faible :

Si vous avez peur d'oubliez le sens de lecture, prenez un repère : l'espace a pour code 2016 (ou 3210).

Ecrivez en équivalent hexadécimal : Bonjour !

Votre réponse n°1

Ecrivez la même chose en décimal.

Votre réponse n°2

Ecrivez en équivalent hexadécimal : C:\Images\a.jpg

Votre réponse n°3

Combien y a-t-il de caractères dans cette table ASCII ?

Votre réponse n°4

Décodez la chaîne suivante encodée en ASCII hexadécimal : 22 42 54 53 20 49 47 22

Votre réponse n°5

Les 32 premiers codes

Le code ASCII étendu ou ISO 8859

Dans certains alphabets, il y a des caractères particuliers, comme les accents par exemple. Les 128 caractères du code ASCII ne suffisaient pas à les représenter.

On a donc standardisé l'ASCII étendu ou ISO 8859, où les caractères sont codés sur 8 bits (soit un octets).

Les besoins n'étant pas les mêmes entre les différents alphabets, on a créé plusieurs tables : ISO-8859-1 à ISO-8859-16. Les tables les plus appropriées pour le français (les seules à intégrer les caractères et œ) sont ISO-8859-15 (ou latin-9, qui privilégie les symboles) et ISO-8859-16 (ou latin-10, qui privilégie les accents d'autres langues européennes).
Toutefois, dans le httpd.conf de mon serveur en production, j'ai du remplacer AddDefaultCharset ISO-8859-15 par AddDefaultCharset ISO-8859-1 pour que les symboles spéciaux (comme € ou les guillemets obliques), soient correctemenr affichés => c'est contradictoire !

Voici la table ASCII ISO-8859-15 (les trous correspondent soit à des caractères inutilisés, soit à des caractères qui ne sont pas pris en charge par le système utilisé) :

Quelques applications du code ASCII

Dans MySQL

Au moment de créer une base ou une table dans MySQL, choisissez les jeux de caractères ISO-8859-15 (latin-9) ou ISO-8859-16 (latin-10).

SELECT cast(0x4D7953514C AS CHAR); : affiche MySQL, cela permet donc de désigner une chaîne de caractère sans utiliser de guillemets, c'est utile pour l'injection SQL par exemple.

SELECT ASCII('A'), ORD('A') : permettent d'obtenir le code ASCII du caractère 'A' (ord marche également avec les caractères multi-octets). Renvoie 65, 65

SELECT CHAR(77,121,83,81,'76'); : transforme chaque code en caractère correspondant (d'après la doc, car mes tests n'ont pas marché). Renvoie MySQL.

En PHP

ord('A') : permet d'obtenir le code ascii du caractère 'A', renvoie 65.

chr(65) : permet d'obtenir le caractère dont le code ASCII est 65, renvoie 'A'.

print_f(iconv_get_encoding()); : affiche les jeux de caractères courants de PHP.

En Visual Basic

Asc('A') : permet d'obtenir le code ascii du caractère 'A', renvoie 65.

Ord(65) : permet d'obtenir le caractère dont le code ASCII est 65, renvoie 'A'.

Mise en pratique

En PHP ou en Visual Basic, écrivez un programme qui permet d'afficher, pour chaque code de 32 à 127, le code et le caractère correspondant. Le résultat devra ressembler à ça :
...
64:@
65:A
66:B
...

Votre réponse n°6

L'unicode et UTF (Universal Transformation Format)

Certains alphabets requièrent plus de caractères que l'ASCII étendu peut en représenter (par exemple 40 000 symboles pour le chinois).

D'autre part on souhaitait unifier le code correspondant à un caractère. Sinon, un devis envoyé par un fournisseur en $ peut être affiché par le client en €.

L'Unicode, utilisant jusqu'à 16 bits et maintenant jusqu'à 32 bits par caractères, permet cette représentation.

UTF-8, UTF-16 et UTF-32 sont les jeux de caractères basés sur Unicode.

En PHP, stockez dans une variable $s la chaîne : Cet été-là, la mer déchaînée. Grâce à la fonction strlen, donnez le nombre de caractères utilisés par cette variable.

Votre réponse n°7

Grâce à la fonction utf8_encode, créez une variable $t qui contient la même chaîne, mais encodée en Unicode (UTF-8). Ecrivez ici le nombre de caractères utilisées par cette nouvelle variable.

Votre réponse n°8

Affichez la variable $t. L'affichage est perturbé mais c'est normal (le navigateur interprète en ISO-8859 quelque chose qui lui est envoyé en Unicode). En examinant la chaîne affichée, expliquez la différence de taille entre les deux représentations de la chaîne.

Votre réponse n°9