Section 3.4

Fichiers

Le moment est opportun pour introduire le concept de fichier. Vous avez certainement déjà tous créé, ouvert, modifié, enregistré, et fermé des fichiers. Mais au fond, qu'est-ce qu'un fichier ?

Un fichier est une suite finie de bits auquel on associe un nom et diverses autres informations (date de création, date de dernière modification, taille, etc.) qu'on appelle métadonnées. Cette suite de bits est généralement stockée sur un support de stockage (disque dur, clé USB, CD, DVD, etc.). Un fichier peut contenir n'importe quelle sorte d'information : du texte, des images, des sons, des vidéos, des programmes, etc. selon le type de fichier. L'information contenue dans un fichier est structurée selon le format du fichier.

Formats de fichiers

On appelle format de fichier la manière dont l'information est structurée dans un fichier. Le format d'un fichier est en principe déterminé par son extension (la partie du nom de fichier qui suit le dernier point).

♣︎ Exemple

Le format JPEG est un format de fichier pour les images. Ce format est associé aux extensions .jpg et .jpeg. Le format PNG est un autre format de fichier pour les images, associé à l'extension .png. Une même image ne sera pas représentée de la même manière selon qu'elle est enregistrée au format JPEG ou au format PNG.

Le format HTML est un format de fichier pour les pages web (comme celle que vous êtes entrain de lire). Ce format est associé à l'extension .html.

En pratique, on fait souvent référence à un format de fichier en utilisant l'extension associée au format. On parle par exemple du format .jpg ou du format .png.

! Remarque

La notion de format de fichier est en essence assez similaire à celle de code. En effet, les deux concepts ont trait à la représentation sous forme de séquences de symboles, typiquement des bits, d'information. Dans les deux cas, on parle aussi d'encoder et de décoder de l'information.

Il y a cependant quelques différences importantes entre les deux notions :

  • Un code représente un nombre fini de valeurs. Au contraire, les formats permettent le plus souvent de représenter une infinité de différents fichiers.
  • Les formats de fichiers permettent de décrire de l'information de manière structurée. Un format de fichier permettra de décrire les différentes parties d'un fichier et leur signification. Dans un code, cette notion de structure est généralement moins présente.

Généralement, un format de fichier détermine quels codes sont utilisés pour représenter les différentes sortes d'information qu'un fichier peut contenir.

Le format .txt

Un des formats de fichier les plus simples est le format .txt. Ce format est utilisé pour les fichiers textuels. Le format indique comment représenter du texte sous forme de séquences d'octets. Chaque caractère est représenté par un mot de code tiré d'un certain code, comme par exemple le code ASCII ou le code UTF-8 que l'on a vu dans la section précédente. Les mots de codes des caractères sont ensuite simplement concaténés pour former la séquence d'octets qui représente le texte.

À noter que le format .txt ne spécifie pas le code utilisé pour représenter les caractères. Pour lire correctement un fichier .txt, il faut donc savoir quel code a été utilisé pour le créer. Cette information est parfois indiquée dans les métadonnées du fichier, et parfois les logiciels utilisés pour lire le fichier doivent essayer de deviner le code utilisé. Dans ce dernier cas, il peut arriver que le texte ne soit pas affiché correctement.

! Remarque

Lorsqu'on décode un texte en utilisant un code qui n'est pas le bon, on obtient un résultat qui, dans le meilleur des cas contient quelques caractères inconnus, et dans le pire des cas est complètement illisible. À cause de la prolifération de différents codes sur le Web, il était courant de rencontrer des fichiers ou des pages Web qui ne s'affichaient pas correctement à cause d'un mauvais décodage. On appelle ce phénomène le mojibake, un nom emprunté au japonais qui signifie littéralement « changements de caractères ».

Formats textuels et formats binaires

Un format de fichier est dit textuel si les fichiers qu'il décrit sont représentés sous forme de séquences de caractères encodés. Le format .txt est un format textuel, tout comme le format .html (le format des pages Web) ou encore .py (le format des fichiers Python).

Au contraire, un format de fichier est dit binaire si les séquences de bits qui le composent ne sont pas simplement directement interprétées comme des caractères. Par exemple, le format JPEG est un format binaire, tout comme le format PNG.

Nous aurons l'occasion dans la suite de ce chapitre de discuter de différents formats de fichiers.

Tailles de fichiers

On appelle la taille d'un fichier le nombre de bits qu'il contient. La taille d'un fichier est généralement exprimée en octets. Un octet est un groupe de 8 bits.

Les fichiers peuvent être de tailles très différentes. On peut avoir des fichiers de quelques octets comme des fichiers de plusieurs milliards d'octets. Pour cette raison, on utilise de nombreuses unités pour exprimer les tailles de fichiers. Ci-dessous se trouve un tableau récapitulatif des principales unités utilisées.

Unité Symbole Nombre d'octets
octet o 1 100
kilo-octet ko 1'000 103
méga-octet Mo 1'000'000 106
giga-octet Go 1'000'000'000 109
tera-octet To 1'000'000'000'000 1012
peta-octet Po 1'000'000'000'000'000 1015

On utilise les mêmes unités pour exprimer la taille de la mémoire d'un ordinateur, que ce soit la mémoire vive ou la mémoire de masse.

! Remarque

Historiquement, ces unités ont été définies en utilisant les puissances de 2 au lieu des puissances de 10 par certaines personnes. Un kilo-octet était alors défini comme 1'024 octets (210 octets), un méga-octet comme 1'024 kilo-octets (220 octets), etc. Cette définition est aujourd'hui obsolète.

Pour le kilo-octet, la différence entre les deux définitions est presque négligeable (environ 2%). Cependant, pour de plus grandes unités la différence devient importante. Par exemple, un giga-octet vaut 1'000'000'000 octets selon la définition actuelle, mais 1'073'741'824 octets selon la définition obsolète, soit un écart d'à peu près 7%.

Pour faire la différence entre les deux définitions, on utilise parfois les préfixes kibi (kilo-binaire), mibi (méga-binaire), gibi (giga-binaire), etc. pour désigner les unités basées sur les puissances de 2.

Certains logiciels, notamment Windows de Microsoft, utilisent encore les anciennes définitions tout en utilisant les symboles des nouvelles définitions. Par exemple, Windows affiche 1 Go pour 1'073'741'824 octets. Cela peut être source de confusion, notamment lorsque son ordinateur affiche une capacité de disque dur inférieure à celle annoncée par le fabricant à cause de cette différence de définition.

Éditeurs hexadécimaux

Généralement les fichiers sont créés et lus par des programmes informatiques et les bits qu'ils contiennent ne sont pas directement visibles. Cependant, il existe des programmes qui permettent de visualiser les bits contenus dans un fichier. Parmi ces programmes, on trouve les éditeurs hexadécimaux.

! Remarque

Dans le cadre de ce cours, nous utiliserons l'éditeur hexadécimal HexEd.it qui est disponible en ligne sous la forme d'une application Web.

Lettres de A à F.

Ces programmes affichent le contenu d'un fichier sous la forme d'une suite de symboles hexadécimaux. Un symbole hexadécimal est un chiffre entre 0 et 9 ou une lettre entre A et F. Il y a donc en tout 16 symboles hexadécimaux différents. On appelle ce système de numération le système hexadécimal, ou base 16.

Ci-dessous sont présentés les représentations en base 10, base 16 et base 2 (sur 4 bits) des nombres de 0 à 15.

Décimal Hexadécimal Binaire (4 bits)
0 0 0000
1 1 0001
2 2 0010
3 3 0011
4 4 0100
5 5 0101
6 6 0110
7 7 0111
8 8 1000
9 9 1001
10 A 1010
11 B 1011
12 C 1100
13 D 1101
14 E 1110
15 F 1111

Le système hexadécimal est très utilisé en informatique car il est extrêmement pratique pour représenter des bits et plus particulièrement des octets de manière compacte. Chaque symbole hexadécimal représente exactement un groupe de 4 bits, et à chaque groupe de 4 bits correspond exactement un symbole hexadécimal.

Par conséquent, chaque octet peut être représenté par une unique paire de symboles hexadécimaux, et chaque paire de symboles hexadécimaux correspond à un unique octet.

♣︎ Exemple

L'octet 10100001 est représenté en hexadécimal par A1. En effet, les 4 premiers bits (1010) correspondent à A et les 4 derniers bits (0001) à 1.

L'octet 74, représenté ici en hexadécimal, est représenté en binaire par 01110100.

Les éditeurs hexadécimaux permettent de visualiser le contenu d'un fichier sous la forme d'une suite de symboles hexadécimaux. Ils permettent également de modifier le contenu en modifiant ces symboles.

À essayer

Téléchargez le fichier ascii.txt puis ouvrez-le avec un éditeur de texte. Vous devriez voir le contenu du fichier, c'est-à-dire "The quick brown fox jumps over the lazy dog.".

Ouvrez ensuite le même fichier à l'aide d'un éditeur hexadécimal tel que HexEd.it. Vous devriez voir le contenu du fichier, mais cette fois-ci sous forme de nombres hexadécimaux. Chaque octet du fichier est représenté par deux symboles hexadécimaux et correspond à un caractère du fichier.

Ce fichier est un fichier texte. L'encodage utilisé pour les caractères de ce fichier est le code ASCII.

À essayer

Le fichier latin1.txt contient un extrait du livre La Nausée de Jean-Paul Sartre encodé en ISO-8859-1. Ouvrez ce fichier avec un éditeur de texte et observez le contenu. Il est possible que certains caractères ne s'affichent pas correctement, car votre éditeur de texte ne sait pas forcément qu'il doit interpréter le fichier avec le code ISO-8859-1. Il s'agit du problème d'encodage que nous avons évoqué précédemment. Dans certains logiciels, il est possible de manuellement spécifier le code utilisé par les caractères avant d'ouvrir le fichier.

Dans un second temps, ouvrez le fichier dans un éditeur hexadécimal tel que HexEd.it. Pouvez-vous retrouver le code des caractères non-ASCII dans le fichier ?