# Formats

# Formats de fichiers : quelques concepts

Un fichier informatique est une suite de nombres compris entre 0 et 255 (chacun de ces nombres est ce qu'on appelle un octet). Suivant le type d'information que l'on veut stocker dans un fichier (texte brut, texte formatté, image, son, programmes, ...), les logiciels organisent les données de manière spécifique pour en faire des suites d'octets. La manière d'organiser un type de donnée pour en faire un fichier s'appelle un format.

Cette page a pour but d'expliquer ce qu'est un format de fichier (sans entrer dans les détails techniques rébarbatifs). Pour savoir plus concrètement comment ouvrir tel ou tel fichier, ou comment convertir mon fichier dans un autre format, allez voir le mémo sur les formats.

## Les deux grands types de formats

Les deux sous-sections qui suivent décrivent les deux grandes familles de formats informatiques.

### Les formats textes ou encore « lisibles par un humain »

Quand vous prenez un stylo et un papier et que vous écrivez des lettres, des chiffres, des symboles de ponctuation, par exemple pour noter un numéro de téléphone, un cours, une dissertation, ou une lettre, n'importe quel autre être humain sachant lire pourra comprendre les informations que vous aurez écrit, au moins en supposant qu'il parle la même langue que vous, cf. notre page sur les encodages et les langues.

Des suites de caractères (plus ou moins nombreux) griffonnés sur un papier ont donc ceci de commun qu'il s'agit de texte brut. Le format informatique (générique) le plus simple est ainsi constitué de suites de caractères, et de retours à la ligne. À chaque caractère correspond un ou plusieurs octets, c'est-à-dire des nombres compris entre 0 et 255, selon une règle définie par un encodage particulier (par exemple, dans l'encodage Latin-1 (le plus courant dans les pays occidentaux), un « A » est codé par le nombre 65 et à chaque caractère correspond un seul octet).

Lorsque vous avez un fichier sous un format « texte brut », vous pouvez le modifier avec n'importe quel éditeur de texte, de même que pour écrire sur un bout de papier, vous pouvez utiliser n'importe quel stylo.

On a vu que l'on pouvait noter tout et n'importe quoi dans un fichier texte, mais pour certains usages, on demande néanmoins à des fichiers au format texte de respecter certaines règles, une certaine syntaxe. Voici quelques exemples de tâches spécifiques qui utilisent des fichiers au format texte brut :

#### Écrire des pages Web

La page Web que vous lisez est au format `HTML` (plus précisément, il s'agit d'`XHTML 1.0 Strict`). En plus de contenir du texte en français « brut », certaines balises permettent de signifier à votre navigateur Web comment il doit afficher la page : une barre de navigation à gauche, nos choix de couleurs, etc... En voici un extrait :

    <p>
    Quand vous prenez un stylo et un papier et que vous écrivez des
    lettres, des chiffres, des symboles de ponctuation, par exemple pour
    noter un numéro de téléphone, un cours, une dissertation, une lettre,
    n'importe quel autre être humain sachant lire (au moins en supposant
    qu'il parle la même langue que vous, cf. notre <a href="encodages.html">page
    sur les encodages et les langues</a>) pourra comprendre les informations
    que vous écrivez.
    </p>

Ainsi par exemple, ce qui se trouve entre `<p>` et `</p>` est un paraphaphe, ou encore un lien hypertexte est dans une balise `<a>`.

#### Envoyer un courrier électronique

Quand vous envoyez un courrier électronique avec votre logiciel préféré, celui-ci va envoyer votre message dans un format particulier : les premières lignes constituent ce qu'on appelle l'en-tete du message, vient ensuite une ligne vide, et tout ce qui vient ensuite constitue le corps du message. L'en-tete du message sert à donner des informations sur l'expéditeur du message, la date, le sujet, l'encodage utilisé, etc... ainsi que quelques informations techniques. Voici un exemple :

    Return-Path: <schtroumpfette@greement.non-existent.invalid>
    Delivered-To: scoubidou@greement.non-existent.invalid
    Received: (qmail 23265 invoked by uid 1033); 17 Sep 2003 15:55:14 -0000
    From: schtroumpfette@greement.non-existent.invalid
    Date: Wed, 17 Sep 2003 17:55:14 +0200
    To: Scoubidou <scoubidou@greement.non-existent.invalid>
    Subject: Bonjour
    Message-ID: <20030917155514.GA23246@greement.non-existent.invalid>
    Mime-Version: 1.0
    Content-Type: text/plain; charset=us-ascii
    Content-Disposition: inline
    User-Agent: Mutt/1.5.4i

    Bonjour,

      J'aimerais discuter avec vous.

    --
    La schtroumpfette

#### Programmer

Les programmes que vous utilisez ont été développés dans différents langages : C, C++, Perl, Shell, etc... Les codes sources de ces programmes sont dans un format texte, ce qui ne les empêche pas de respecter une syntaxe précise. Voici à quoi cela peut ressembler :

    /* bonjour.c : comment dire « Bonjour. » en C */
    #include <stdio.h>

    int main (int argc, char **argv) {
      printf("Bonjour.\n");
      return(0);
    }

    #!/bin/sh
    # Comment dire « Bonjour. » en Shell
    exec echo Bonjour.

Suivant que le langage est interprêté ou compilé, il sera ou non nécessaire de convertir votre code source dans un format exécutable en utilisant un compilateur.

### Les formats binaires

À l'opposé des formats textes, se trouvent les formats binaires. L'information que l'on stocke dans de tels fichiers ne se résume pas à des suites de caractères.

Avant de continuer, précisons que les noms de fichiers comportent souvent une extension, par exemple dans `Le_coucou_au_fond_des_bois.ogg`, l'extension est `ogg`. L'extension permet souvent de savoir rapidement à quel format on a à faire. Attention cependant au fait que parfois derrière un fichier d'une certaine extension peut se cacher sous un autre (cf. le programme `file`) !

Voici brièvement quelques exemples :

#### Images bitmap

Une image peut-être stockée comme une grille de petits points (pixels), chaque pixel ayant une certaine « couleur ». Une fois que l'on a associé certains octets aux différentes couleurs (par exemple 3 octets, un pour la composante rouge, un autre pour la composante bleue, et un dernier pour la composante verte), on peut mettre au début du fichier la largeur et la hauteur de l'image, et ensuite parcourir l'image ligne par ligne, et écrire la séquence d'octets qui correspond à chaque pixel de l'image. Le type de format que je viens de décrire est extrêmement rudimentaire (dans cette famille de format, on trouve le format `bmp` par exemple) ; des fichiers dans un tel format occuperont beaucoup de place sur les disques durs, c'est pourquoi il existe des formats qui contiennent des optimisations pour réduire sensiblement la taille des fichiers d'images (exemples : les formats PNG, JFIF, JPEG), identifiés par les types MIME `image/png` et `image/jpeg` respectivement, et qui reçoivent le plus souvent les extensions `png` et `jpg`).

#### Son échantillonné

C'est comme pour les images : on découpe le son en intervalles de temps très brefs (il y a le plus souvent autour de quarante mille intervalles par seconde) et on note la valeur du signal électrique correspondant, ce qui donne un nombre entier (avec signe) que l'on peut stocker. Pour un enregistrement en stereo, on note parallèlement les valeurs gauche et droite. Comme formats de ce type, on trouve les formats `wav`, `au` De même que pour les images, il existe des techniques de compression qui permettent de réduire considérablement la taille qu'occupent les fichiers sonores. On dispose ainsi des formats `ogg` et `mp3`.

Il existe d'autres manières de stocker de la « musique », les fichiers `midi`, où ne sont enregistrées que des suites d'indications sur les notes que les musiciens jouent sur leurs instruments (d'une certaine manière, ces fichiers contiennent l'information contenue sur une « partition »). Quand vous lisez ces fichiers avec un programme convenable, un synthétiseur (logiciel ou matériel) va convertir ces données en un véritable son.

Évidemment, la qualité musicale qui sort des hauts-parleurs quand vous jouez des fichiers `midi` est très loin d'être à la hauteur de ce qui parvient à vos oreilles quand vous écoutez un orchestre composé de musiciens talentueux !

#### Programmes exécutables

Suivant la famille du système d'exploitation que vous utilisez (Unix, Windows, Mac), et même à l'intérieur d'une famille suivant la variante du système ou le type de processeur, les programmes sont stockés dans un format différent. La partie la plus imporante d'un fichier exécutable est la zone contenant le « langage machine » qui grosso modo contient la liste des instructions qui seront exécutées par le processeur. On ne modifie pas directement un fichier exécutable.

## Cas particuliers

### Traitements de texte

Certains logiciels de traitement de texte utilisent un format binaire pour stocker le texte avec son formatage (taille des fontes, caractères gras, italiques, etc...), plus précisément, ils utilisent plusieurs formats : d'une version à l'autre, le logiciel Microsoft Word utilise un format plus ou moins différent de la version précédente, ce qui pose beaucoup de problèmes, surtout si vous n'avez pas la version « dernier cri » du logiciel en question.

À l'opposé, certains traitements de textes utilisent un format texte, de façon similaire au format `HTML` utilisé sur le Web. C'est par exemple le cas du programme LaTeX. Toutes les informations vous mettez dans un fichier LaTeX (extension `tex`) sont lisibles et modifiables dans votre éditeur de texte préféré, et au moins vous être sûr que le format ne vas pas changer significativement d'une version à l'autre. En voici un échantillon :

    \documentclass{article}
    \usepackage[francais]{babel}
    \usepackage[T1]{fontenc}
    \usepackage[latin1]{inputenc}

    \begin{document}
    Ceci est un fichier \TeX.
    \end{document}

Vous devez utiliser le programme `latex` pour mettre en page votre fichier `tex`. Il va ainsi écrire un fichier binaire dans un format particulier `dvi` qui contient essentiellement beaucoup d'informations qui ressemblent à « À tel endroit de la page numéro 42, afficher MU dans une fonte qui fait 5.08 cm de hauteur. »

### Documents mis en page

Ce sont des fichiers « prêts à être imprimés », ces fichiers contiennent toutes les instructions que l'on a pratiquement plus qu'à envoyer à l'imprimante (ce qui nécessite parfois une conversion).

#### Portable Document Format (`pdf`)

Mais, encore une fois, il existe plusieurs formats de ce type. Nous avons déjà évoqué ci-desus le format `dvi` utilisé par LaTeX. On dispose aussi du format `pdf` (Portable Document Format) développé par Adobe, vous avez très certainement déjà rencontré de tels fichiers en naviguant sur le Web. Les fichiers `dvi` et `pdf` sont au format binaire.

#### PostScript (`ps`)

Un autre format important dans ce contexte est le format PostScript (lui aussi développé par Adobe). Il est depuis quelques années utilisé par la plupart des imprimates. Son grand avantage est qu'il est en mode texte et qu'il ne fait pas d'hypothèse sur la résolution de l'imprimante par exemple, contrairement aux formats utilisés auparavant pour envoyer des instructions aux imprimantes ! Le format PostScript est un véritable langage de programmation (si on veut dessiner 100 fois la même chose, on a pas besoin de réécrire 100 fois les mêmes instructions par exemple).

### Méta-formats

#### Archives

Dans certaines situations, il peut être commode de mettre plusieurs fichiers dans un seul, on appelle cela une archive. En général, au début d'un tel fichier se trouve les noms des fichiers contenus à l'intérieur avec leur taille (ainsi que d'autres informations techniques), puis viennent ensuite chacun des fichiers les uns à la suite des autres. Le format le plus courant pour les fichiers archives sous Unix est le format `tar`. Dans le monde Windows, il est plus souvent question de fichiers `zip`.

Plus généralement, on a la notion de système de fichiers : il s'agit de déterminer comment organiser les fichiers sur un disque dur et d'inscrire les méta-informations, à savoir d'écrire quelque part la liste des fichiers présents sur le disque ainsi que la position sur le disque où ils sont écrits. Là, encore, de nombreuses possibilités existent : sous Linux, on utilise en général `ext2`, `ext3` ou `ReiserFS`, sous Windows, il y a des systèmes de fichiers `fat`, `NTFS`, etc...

#### Fichiers compressés

Quand on a un fichier un peu long que l'on ne consulte pas régulièrement, on peut décider de le comprimer pour qu'il prenne moins de place sur le disque dur. Des outils sont faits pour cela. L'exemple typique de format compressé est donné par les fichiers « gzippés » (extension `gz`). Ainsi par exemple, un fichier PostScript `dea.ps`, une fois comprimé s'appelle `dea.ps.gz`.

Le clou du spectacle s'obtient en combinant les deux méta-formats évoqués ci-dessus : comprimer un fichier d'archive comprenant plusieurs fichiers. On obtient alors un fichier `.tar.gz` (que certains abrègent en `.tgz`) ; c'est un général sous cette forme que l'on peut télécharger le code source de la plupart des logiciels libres.

Auteur : Joël Riou. Dernière modification le .