Représentation des données

Représentation des caractères

Comment ça marche ?

Les caractères sont des données non numériques, ce sont des symboles alphanumériques :

  • les lettres majuscules et minuscules,

  • les symboles de ponctuation (& ~ , . ; # " - etc...),

  • les chiffres.

Un texte, ou chaîne de caractères, sera représenté comme une suite de caractères.

À chaque caractère correspond un nombre qui sera codé en binaire

MéthodeLe codage ASCII

Historiquement, le codage ASCII (American Standard Code for Information Interchange) a été défini et utilisé pour écrire des textes en anglais.

La table ASCII fournit la correspondance entre 128 caractères et leur représentation binaire. Les caractères sont numérotés de 0 à 127.

A priori, 7 bits suffisent à coder ces caractères, en effet 128 = 27.

En pratique, les ordinateurs travaillent presque tous sur des multiples de 8 bits, ce que l'on nomme octet.

Chacun des 128 caractères ASCII est donc codé par un octet dont le 8ème bit est à 0.

Ci-dessous on donne les représentations en binaire des caractères :

1
     |0000 |0001 |0010 |0011 |0100 |0101 |0110 |0111 |1000 |1001 |1010 |1011 |1100 |1101 |1110 |1111 |
2
 ----+-----------------------------------------------------------------------------------------------+ 
3
0000 | NUL | SOH | STX | ETX | EOT | ENQ | ACK | BEL |  BS |  HT |  LF |  VT |  FF |  CR |  SO |  SI |
4
0001 | DLE | DC1 | DC2 | DC3 | DC4 | NAK | SYN | ETB | CAN |  EM | SUB | ESC |  FS |  GS |  RS |  US |
5
0010 |  SP |  !  |  "  |  #  |  $  |  %  |  &  |  '  |  (  |  )  |  *  |  +  |  ,  |  -  |  .  |  /  |  
6
0011 |  0  |  1  |  2  |  3  |  4  |  5  |  6  |  7  |  8  |  9  |  :  |  ;  |  <  |  =  |  >  |  ?  |
7
0100 |  @  |  A  |  B  |  C  |  D  |  E  |  F  |  G  |  H  |  I  |  J  |  K  |  L  |  M  |  N  |  O  |  
8
0101 |  P  |  Q  |  R  |  S  |  T  |  U  |  V  |  W  |  X  |  Y  |  Z  |  [  |  \  |  ]  |  ^  |  _  |
9
0110 |  `  |  a  |  b  |  c  |  d  |  e  |  f  |  g  |  h  |  i  |  j  |  k  |  l  |  m  |  n  |  o  |
10
0111 |  p  |  q  |  r  |  s  |  t  |  u  |  v  |  w  |  x  |  y  |  z  |  {  |  |  |  }  |  ~  | DEL |
11
 ----+-----------------------------------------------------------------------------------------------+ 

On lit dans cette table que la représentation binaire du caractère 'a' est '0110 0001' (7e ligne, 2e colonne).

Ce qui correspond à l'écriture en binaire du nombre 97

On dit que le code ASCII de 'a' est 97

Et celle du 'z' est 01111010 soit 122

Le code ASCII de 'z' est 122

Les 33 caractères de contrôle ( les deux premières lignes et le caractère DEL) correspondent aux significations suivantes :

1
NUL     Null (nul)
2
    SOH     Start of Header (debut d'en-tete)
3
    STX     Start of Text (debut du texte)
4
    ETX     End of Text (fin du texte)
5
    EOT     End of Transmission (fin de transmission)
6
    ENQ     Enquiry (End of Line) (demande, fin de ligne)
7
    ACK     Acknowledge (accuse de reception)
8
    BEL     Bell (caractere d'appel)
9
    BS      Backspace (espacement arriere)
10
    HT      Horizontal Tab (tabulation horizontale)
11
    LF      Line Feed (saut de ligne)
12
    VT      Vertical Tab (tabulation verticale)
13
    FF      Form Feed (saut de page)
14
    CR      Carriage Return (retour chariot)
15
    SO      Shift Out (fin d'extension)
16
    SI      Shift In (demarrage d'extension)
17
    
18
    DLE     Data Link Escape
19
    DC1-DC4 Device Control (controle de peripherique)
20
    NAK     Negative Acknowledge (accuse de reception negatif)
21
    SYN     Synchronous Idle
22
    ETB     End of Transmission Block (fin du bloc de transmission)
23
    CAN     Cancel (annulation)
24
    EM      End of Medium (fin de support)
25
    SUB     Substitute (substitution)
26
    ESC     Escape (echappement)
27
    FS      File Separator (separateur de fichier)
28
    GS      Group Separator (separateur de groupe)
29
    RS      Record Separator (separateur d'enregistrement)
30
    US      Unit Separator (separateur d'unite)
31
    SP      Space (espace)
32
    
33
    DEL     Delete (effacement)

RemarqueLes lettres

Les lettres se suivent dans l'ordre alphabétique (codes 65 à 90 pour les majuscules, 97 à 122 pour les minuscules).

Pour passer des majuscules au minuscules, il faut ajouter 32 au code ASCII des majuscules.

Comme  : 97 - 65 = 32 = 25

Cela revient à modifier le 5ème bit en binaire :

G(71) 01000111 et g(103) 01010111

RemarqueLes chiffres

Les chiffres sont rangés dans l'ordre croissant (codes 48 à 57), et les 4 premiers bits définissent la valeur en binaire du chiffre.

1
00110000   0    48
2
00110001   1    49
3
00110010   2    50
4
00110011   3    51
5
00110100   4    52
6
00110101   5    53
7
00110110   6    54
8
00110111   7    55
9
00111000   8    56
10
00111001   9    57

Et les autres caractères ?

La nécessité de représenter des textes comportant des caractères non présents dans la table ASCII tels ceux de l'alphabet latin utilisés en français comme le 'à', le 'é' ou le 'ç' impose l'utilisation d'un autre codage que l'ASCII.

Plusieurs propositions de codage coexistent.

Afin de faciliter les choses, ces propositions sont des extensions du codage ASCII :

  • le codage des caractères présents dans la table ASCII est conservé ;

  • le principe du codage de chacun des caractères sur un octet est conservé.

Mais les 8 bits de l'octet vont être utilisés. Cela permet de coder 28 = 256 caractères, soit 128 caractères supplémentaires.

L'ISO, organisation internationale de normalisation, propose de son côté plusieurs variantes de codages adaptées aux différentes langues. La plus utilisée concerne les langues européennes occidentales. Il s'agit de l'ISO-8859-1, aussi nommé ISO-Latin1.

Microsoft propose le codage dit Windows-1252 (encore appelé ANSI, bien que cela puisse paraître abusif, l'ANSI, American National Standards Institute, n'ayant jamais validé cette table !).

Ce codage ne diffère de l'ISO-8859-1 que pour quelques caractères tels le signe euro, €, la ligature o-e, œ, ou certains guillemets qui utilisent des codes réservés par ISO-Latin-1 pour des caractères de contrôle.

Et les autres langues ?

À l'évidence, 256 caractères ne suffisant pas pour représenter les lettres de tous les alphabets utilisés (pensons au russe, à l'hébreu, etc.), un nouveau standard a été introduit : Unicode.

La table Unicode comporte la définition de près de cent cinquante mille caractères.

Le codage de cette table est multiple. Le codage le plus couramment utilisé se nomme UTF-8. Son principe est le suivant : une première série de caractères sont codés sur un octet. D'autres caractères sont codés sur deux octets.

De même des codages sur 3 ou 4 octets sont utilisés pour d'autres caractères. (Cette rapide introduction à UTF-8 est volontairement simplifiée.)

Les 128 premiers caractères de la table UTF-8 sont compatibles avec le codage ASCII. Ainsi le codage UTF-8 d'un texte ne comportant que des caractères présents dans la table ASCII sera le même que le codage ASCII de ce texte.

Ce ne sera pas vrai pour un texte ISO-Latin-1.

Il importe donc, quand on veut décoder un texte, de savoir quel est le codage utilisé sous peine de décoder improprement les caractères.

C'est pourquoi, on utilisera un encodage en UTF-8...

PrécédentPrécédentSuivantSuivant
AccueilAccueilImprimerImprimer Stéphan Van Zuijlen Licence de documentation libre GNURéalisé avec Scenari (nouvelle fenêtre)