Codage du texte

Signaler

Un fichier informatique n’est finalement qu’une suite d’octets. Utiliser tel encodage plutôt que tel autre revient à interpréter la même séquence d’octets comme deux textes différents.

I. L’ancêtre ASCII

Pour échanger du texte entre ordinateurs, le choix d’une convention de codage standardisée est nécessaire. C’est ainsi qu’est né le code ASCII (American Standard Code for Information Interchange) dans les années 1960.

C’est une table de 128 caractères numérotés de 0 à 127 (sur 7 bits) dont voici un extrait.

Code

48

49

50

51

52

53

54

55

56

57

58

59

Car.

0

1

2

3

4

5

6

7

8

9

:

;

Code

60

61

62

63

64

65

66

67

68

69

70

71

Car.

<

=

>

?

@

A

B

C

D

E

F

G

La table complète contient les lettres majuscules et minuscules, les chiffres, plusieurs caractères de ponctuation, et des caractères invisibles comme l’espace, la tabulation ou le retour à la ligne.

Suffisante pour rédiger un texte en anglais, ou un programme informatique, la table ASCII ne contient aucun caractère accentué.

II. ASCII étendu et échanges de fichiers

1) Tables ASCII étendues

Les tables ASCII étendues contiennent 256 caractères. Il existe une multitude de telles tables : latin 1, latin 9, windows-1252…

Elles contiennent toutes les 128 premiers caractères de l’ASCII, ainsi que 128 caractères spécifiques, différents selon la table utilisée : caractères latins, grecs, cyrilliques…

2) Le problème d’échange des fichiers

Lorsqu’un fichier texte est enregistré en utilisant une table de caractères (un charset) particulière, il faut le lire en utilisant la même table, sans quoi certains caractères ne seront pas corrects.

Ce phénomène est parfois observé sur des pages web, si le navigateur n’utilise pas le bon charset.

05230_chap01_i03_fake_wikipedia

Fausse page Wikipédia

Dans cette fausse page Wikipédia, encodée en latin 1 et affichée en iso-8859-7 (caractères grecs), les caractères accentués sont incorrects.

III. Unicode à la rescousse

1) Une table universelle

Afin de régler définitivement le problème d’encodage des caractères, une norme est apparue au début des années 1990 : Unicode. Cette table de caractères contient actuellement plus de 135 000 symboles, l’objectif étant qu’elle couvre tous les besoins imaginables.

Unicode ne peut toutefois pas être utilisé directement. Chaque caractère étant actuellement codé sur 21 bits, utiliser le code Unicode à la place d’une table ASCII étendue multiplierait par 3 la taille des fichiers pour un même contenu !

2) Le codage UTF-8

Il existe plusieurs encodages parcimonieux dont UTF-8. Dans ce cas, les 128 caractères du code ASCII sont codés sur 1 seul octet, et une séquence particulière permet d’accéder aux autres caractères de la table, qui sont codés sur 2 à 4 octets.

Unicode et l’encodage UTF-8 sont la solution actuelle aux problèmes d’encodage de texte. Depuis la version 3, Python représente ses chaînes de caractères en Unicode.