Représentation des caractères

Représentation des caractères#

En informatique, les caractères (lettres, signes de ponctuation, ...) sont représentés grâce à un tableau de correspondance. Au fil des années, plusieurs de ces tableaux ont été créés pour représenter différents jeux de caractères. Certains de ces tableaux sont aujourd'hui tombés dans l'oubli, alors que d'autres sont devenus des standards utilisés par la plupart de nos systèmes modernes.

La table ASCII#

La table ASCII (American Standard Code for Information Interchange) est l'un des premiers standards universels de codage des caractères. Créée en 1963 et standardisée en 1967, elle utilise 7 bits pour représenter 128 (27) caractères différents. Ces caractères incluent :

  • Les lettres majuscules et minuscules de l'alphabet latin (A-Z, a-z).

  • Les chiffres (0-9).

  • Les signes de ponctuation et caractères spéciaux (par exemple, !, @, #).

  • Des caractères de contrôle (comme ACK, SYN, ou LF pour indiquer un saut de ligne).

ASCII a servi de base à de nombreux autres systèmes de codage, mais il présente des limitations importantes, notamment son incapacité à représenter des caractères accentués, des alphabets non latins, ou d'autres symboles'. Ce tableau de correspondance est donné ci-dessous

ASCII

BITS

ASCII

BITS

ASCII

BITS

ASCII

BITS

NUL

0000000

SP

0100000

@

1000000

`

1100000

SOH

0000001

!

0100001

A

1000001

a

1100001

STX

0000010

"

0100010

B

1000010

b

1100010

ETX

0000011

#

0100011

C

1000011

c

1100011

EOT

0000100

$

0100100

D

1000100

d

1100100

ENQ

0000101

%

0100101

E

1000101

e

1100101

ACK

0000110

&

0100110

F

1000110

f

1100110

BEL

0000111

'

0100111

G

1000111

g

1100111

BS

0001000

(

0101000

H

1001000

h

1101000

HT

0001001

)

0101001

I

1001001

i

1101001

LF

0001010

*

0101010

J

1001010

j

1101010

VT

0001011

+

0101011

K

1001011

k

1101011

FF

0001100

,

0101100

L

1001100

l

1101100

CR

0001101

-

0101101

M

1001101

m

1101101

SO

0001110

.

0101110

N

1001110

n

1101110

SI

0001111

/

0101111

O

1001111

o

1101111

DLE

0010000

0

0110000

P

1010000

p

1110000

DC1

0010001

1

0110001

Q

1010001

q

1110001

DC2

0010010

2

0110010

R

1010010

r

1110010

DC3

0010011

3

0110011

S

1010011

s

1110011

DC4

0010100

4

0110100

T

1010100

t

1110100

NCK

0010101

5

0110101

U

1010101

u

1110101

SYN

0010110

6

0110110

V

1010110

v

1110110

ETB

0010111

7

0110111

W

1010111

w

1110111

CAN

0011000

8

0111000

X

1011000

x

1111000

EM

0011001

9

0111001

Y

1011001

y

1111001

SUB

0011010

:

0111010

Z

1011010

z

1111010

ESC

0011011

;

0111011

[

1011011

{

1111011

FS

0011100

<

0111100

\

1011100

|

1111100

GS

0011101

=

0111101

]

1011101

}

1111101

RS

0011110

>

0111110

^

1011110

~

1111110

US

0011111

?

0111111

_

1011111

DEL

1111111

UTF-8#

Le standard de représentation des caractères est aujourd'hui UTF-8. Il s'agit d'un système de codage de caractères qui permet de représenter tous les caractères recensés dans Unicode tout en étant compatible avec les systèmes plus anciens, tels que ceux utilisant la table ASCII.

  • Compatibilité : Les premiers 128 caractères, qui incluent tous les caractères de base de l'ASCII, sont représentés de la même manière en UTF-8 et en ASCII (c'est-à-dire avec un octet).

  • Longueur variable : Les caractères suivants sont encodés avec deux, trois ou quatre octets. Par exemple, un caractère comme "é" sera codé en deux octets, tandis qu'un caractère comme "😊" sera codé en quatre octets. L'idée est de représenter les caractères les plus fréquemment utilisés avec moins de bits de manière à rendre les fichiers les moins lourds possible.

La table UTF-8 est trop grande pour être affichée au complet ici, mais vous trouvez ci-dessous quelques exemples de caractères avec leur représentation binaire UTF-8.

Caractère

UTF-8 (binaire)

A

01000001

ñ

11000011 10110001

11100010 10000010 10101100

😀

11110000 10011111 10011000 10000000

11100100 10111000 10101101

أ

11011000 10100011

11100010 10011001 10101011

🌍

11110000 10011111 10001100 10001101

Pour la lecture d'un texte encodé avec ASCII, il suffisait de séparer les bits 7 par 7 avant de les convertir. Avec UTF-8 c'est un peu plus compliqué. En regardant les exemples ci-dessus, vous noterez que les caractères encodés avec un octet commencent par un 0, que les caractères encodés avec deux octets commencent par deux 1, avec trois octets avec trois 1, et quatre octets avec quatre 1. Il faut donc lire ces premiers bits pour faire la séparation avant de convertir le code binaire.

Exercices#

Exercice 1#

A l'aide de la table ASCII qui se trouve sur cette page, déchiffrez le message suivant : 100011111100101100001110001111001010100000100100011011111110000111000011001011110010

Exercice 2#

A l'aide de la table ASCII qui se trouve sur cette page, encodez le mot "Suisse".

Exercice 3#

a) Si on écrit dans un fichier texte de notre ordinateur le message "Hello World !", quel sera la taille de ce fichier (en octets), sachant que celui-ci sera encodé avec UTF-8 ?

b) Si l'on efface ce texte et qu'on écrit "Où as-tu mangé à midi ?" à la place, quelle sera la taille du fichier ?

d) A votre avis, si l'on enregistrait ces textes non pas dans des fichiers .txt, mais des fichiers Word, ceux-ci seraient-il plus lourds, plus légers, ou feraient le même poids ?

Exercice 4#

a) Le texte ci-dessous est encodé en UTF-8. Comme vous le savez, UTF-8 encode les caractères avec des séquences de 1, 2, 3, ou 4 octets. Commencez par grouper les octets appartenant à la même séquence.

01010011 01100011 01101000 11000011 10110110 01101110 00100000 11110000 10011111 10010000 10111011

b) En utilisant cette table UTF-8, décodez ce texte. N'hésitez pas à utiliser de la fonction "recherche" avec CTRL+F (ou CMD+F sur Mac). Indice : le dernier caractère se trouve dans la catégorie Miscellaneous Symbols and Pictographs