# Format de données

En informatique, un format de données est la façon dont est représenté (codé) un type de données, sous forme d'une suite de bits. Par commodité, on interprète cette suite de bits comme un nombre binaire, et on dit par raccourci que la donnée est représentée comme un nombre. Par exemple, le caractère « C » est généralement codé comme une suite dont 3 bits sont activés, ce que l'on écrit 0100 0011, soit 67 en décimal.
Un format de données est ainsi une convention (éventuellement normalisée) utilisée pour représenter des données — des informations représentant un texte, une page, une image, un son, un fichier exécutable, etc. C'est un gabarit où les données sont placées à des endroits particuliers pour que l'outil qui lit ce format trouve les données où il s'attendait à les trouver. Lorsque ces données sont stockées dans un fichier, on parle de format de fichiers. Une telle convention permet d'échanger des données entre divers programmes informatiques ou logiciels, soit par une connexion directe, soit par l'intermédiaire d'un fichier. On appelle interopérabilité cette possibilité d'échanger des données entre différents logiciels.

## Typologie

On distingue un format ouvert, dont la spécification est publiquement accessible, d'un format fermé (ou opaque) dont la spécification est secrète. Un format fermé correspond généralement à un logiciel seul capable de pleinement l'exploiter.
Une autre distinction s'opère entre un format normalisé, faisant l'objet d'une normalisation par une institution publique ou internationale (ISO, W3C) et un format quelconque, qui peut devenir un standard du fait de sa popularité. Un tel format est parfois normalisé par la suite comme OpenDocument.
Un format est dit propriétaire s'il a été élaboré par une entreprise, dans un but essentiellement commercial. Un format propriétaire peut être ouvert (le format PDF d'Adobe par exemple) s'il est publié, ou fermé (le format Doc de Microsoft par exemple). Mais même lorsque des spécifications sont rendues publiques, les entreprises à l'origine de formats propriétaires tentent d'en conserver le contrôle soit en proposant régulièrement de nouvelles versions plus élaborées (contrôle par maintien d'une avance technologique), soit en utilisant des moyens juridiques comme le brevet. Ce type de pratiques anti-concurrentielles via des outils juridiques est admis aux États-Unis. Elle est sujette à controverse en Europe (voir Brevetabilité du logiciel).

## Formats de nombres
### Nombres entiers

Un nombre entier naturel est en général simplement représenté en binaire (en base 2), avec la règle de conversion classique. À la différence des entiers naturels, les entiers informatiques sont finis. On ne peut donc représenter ainsi que les nombres tenant dans l'intervalle défini par le nombre de bits disponible. Lorsque l'on veut représenter un entier relatif, on réserve un bit pour désigner le signe (en général le bit le plus à gauche) ; on parle alors d'« entier signé ». La plupart du temps, les nombres négatifs seront codés selon la règle du complément à deux.
Par exemple, avec un octet on peut représenter :
* les entiers naturels de 0 (00000000 en binaire) à 255 (11111111 en binaire) ;
* les entiers relatifs de −128 (10000000 en binaire) à −1 (11111111 en binaire) et de 0 (00000000) à 127 (01111111) ; on code donc avec un octet les entiers de −128 à +127.
On notera que pour comparer deux entiers relatifs codés ainsi, il suffit de réaliser un OU exclusif avec (10000000 en binaire) sur chacun avant le test.
D'autres types sont également usités pour représenter les entiers, il s'agit du codage BCD de forme étendue (un chiffre sur un octet), ou compactée (un chiffre sur 4 bits). Bien que ces formats soient moins performants pour des calculs que le système binaire décrit supra car ils nécessitent des instructions supplémentaires pour remettre en forme le résultat des opérations arithmétiques réalisées, ils sont toujours employés sur de nombreux systèmes (Ordinateur central, SGBD…) et gérés par les processeurs, car ils ne sont pas limités par le nombre de bits utilisés par le processeur pour l'arithmétique binaires (8 bits, 16 bits, 32 bits, 64 bits…) et qu'ils conservent la précision unitaire contrairement aux nombres à virgule flottante.

### Nombres fractionnaires

Une fraction s'écrit avec un numérateur et un dénominateur, donc deux entiers. Cela ne peut toutefois être utilisé que dans du calcul formel.

### Nombres à virgule

Pour le calcul, on préfère utiliser des entiers informatiques en base deux ou dix, dans lesquels intervient une virgule, à une position variable (déci-micro-nano-pico) ou fixe (francs-centimes).
Pour les nombres fractionnaires, la convention de numération veut qu'en base n, « 0,a » désigne a × 1/n (= a × n$^{−1}$), « 0,0a » désigne a × 1/n$^2$ (= a × n$^{−2}$)… Par exemple en base 10 (n = 10), « 0,005 » désigne 5 × 10$^{−3}$.
Ainsi, le nombre 0,001 en binaire (n = 2) désigne 1 × 2$^{−3}$ = 0,125.
Donc en informatique, la première solution consiste à attribuer un certain nombre de bits à droite aux puissances négatives de 2.
Une autre solution consiste à utiliser le codage BCD comme pour les entiers en considérant le positionnement de la virgule à une position fixe, par exemple, pour un codage sur 10 chiffres, les huit premiers chiffres contiennent la partie entière et les deux derniers la partie décimale. Ce positionnement est totalement arbitraire et doit être géré par le programmeur pour les affichages ou les calculs, surtout pour les multiplications ou lorsque deux nombres ne sont pas définis avec le même nombre de chiffres après la virgule. C'est ce type de donnée qui est généralement utilisé dans les SGBD pour le type DECIMAL.

## Formats de texte

Les textes sont formés de caractères en nombres finis (lettres, diacritiques, signes de ponctuation, etc.), du moins dans les alphabets européens. S'il était simple d'attribuer un nombre à chaque caractère dans tous contextes régionaux, cette conversion {caractère → nombre} serait définie par convention sous la forme d'une table, ou page de code. Dans la pratique, pour des raisons d'interopérabilité, on utilise des systèmes de codage plus sophistiqués. Les plus utilisés sont la page de code régionale ASCII pour l'anglais, ses variantes et ses extensions d'autres pays ainsi que l'Unicode.
Les textes comprennent aussi de la mise en page (alignement des paragraphes) et de la mise en forme (type de police de caractère, taille…). La solution retenue en général consiste à définir des mots de commande, des instructions, séparées du texte par un caractère spécial. Ainsi, en HTML, les instructions sont appelées « balises » et sont mises entre des chevrons <…> ; en LaTeX, les instructions sont introduites par une barre de fraction inversée \. De ce fait, certains caractères sont réservés aux instructions et ne peuvent plus faire partie du texte ; il existe alors des « codes d'échappement », ou bien des instructions spéciales permettant de les représenter.
Jusqu'en 2006, le logiciel Microsoft Word a retenu une autre manière de stocker la mise en forme: les données (texte et images) sont mises en brut (sans mise en forme) dans le document, et la mise en forme est définie dans une partie du document appelée « saut de section » (section break). Le saut de section, hormis le fait de marquer un changement de mise en page (saut de colonne, saut de page), est une zone invisible contenant des pointeurs attribuant un formatage à une partie de la section. Cette solution de stockage brut des données a été historiquement adoptée à une époque où peu d'autres solutions existaient (au début des années 1980). C'était une approche couramment adoptée pour beaucoup d'applications et liée entre autres au niveau faible de standards de stockage. Cependant, l'expérience a montré que cette approche se révèle très lourde et source de problèmes (corruption de documents) pour les documents ayant environ 100 pages et plus. Si Microsoft a tenté de conserver son modèle et de le faire évoluer petit à petit pour éviter de tout reprendre à la base, ce dernier est arrivé à ses limites. Pour son édition de 2007, Microsoft a adopté un nouveau format propriétaire, Open XML.

## Formats d'image

La base de la représentation des images est la géométrie analytique.

### Format carte de points

On peut découper une image en points élémentaires, ou « pixel », et attribuer une couleur à ce pixel. La couleur est représentée par un nombre, la correspondance couleur → nombre étant faite par une « palette ».
Il est inutile de donner les coordonnées des points : si l'on donne la largeur de l'image en nombre n de points, alors les n premiers points représentent la première ligne, les points n+1 à 2n représentent la deuxième ligne… Il suffit alors de fixer par convention l'ordre de balayage, en l'occurrence l'ordre de lecture occidental (de gauche à droite et de haut en bas).
Ceci donne une image au format carte de points, souvent appelée image bitmap. C'est donc un canevas de points dont chacun se voit attribuer une valeur colorée. Les grandes différences entre les formats existants sont la profondeur de couleurs (1 bit : noir ou blanc, 8 bits : 256 couleurs, 24 bits : 16 millions de couleurs…) et le type de compression (sans compression, ou raw, avec une compression par motifs, avec une compression destructive…)
Par exemple, prenons une carte noir et blanc (1 pour la couleur de forme, 0 ou · pour la couleur de fond) définissant une image large de cinq points par la suite de chiffres suivante :
Il faut découper cette carte par groupes de 5 bits :
ce qui nous donne le dessin d'un « X » en «couleur de forme» sur fond «couleur de fond». Toutefois ici, aucun bit n'indique la couleur aussi la couleur du rendu dépend de la technologie utilisée et de la configuration de celle-ci.
Le format des données doit donc inclure, outre la liste des points, la largeur de l'image et la description de la palette ; ceci se fait en général en début de fichier (on parle d'« en-tête » de fichier).
Quelques formats d'image matricielle célèbres : Portable Network Graphics, JPG, BitMaP, Portable pixmap.

### Format vectoriel

Une image au format vectoriel est une image qui se décrit par des ensembles de coordonnées mathématiques et non par un canevas de points. Par exemple :
* pour décrire une ligne il suffit de connaître ses coordonnées de départ et d'arrivée ;
* pour un rectangle (ayant ses côtés alignés aux axes du système de coordonnées en cours), deux points suffisent aussi (deux coins opposés) ;
* pour un cercle, un seul point, ainsi qu'un rayon, sont nécessaires.
En outre, des informations sur le tracé sont nécessaires : les attributs graphiques sont l'épaisseur, le style (continu ou pointillés), la couleur du trait, sa transparence, etc.
Une image vectorielle est donc un ensemble de coordonnées, d'attributs et de commandes que le programme d'affichage (à l'écran ou sur papier) se charge d'interpréter.
Pour des images pouvant être réduites facilement à des formes géométriques (typographisme, cartographie…), le format vectoriel est extrêmement économe.
La particularité des formats vectoriels réside dans le fait que leur rendu final ne dépend que de la résolution du périphérique de sortie. Ce type d'image peut aussi être agrandi sans effets gênants ; il n'y a pas d'effet de « pixellisation » (les lignes diagonales ou courbes n'apparaissent pas sous forme d'escalier).
Quelques formats vectoriels célèbres : VML, SVG, Adobe PDF (Acrobat), Adobe Illustrator, encapsuled postscript EPS, Quark QXD, Silverlight et Macromedia Flash (formats d'animation vectorielle), AutoCAD DXF.

### Représentation des couleurs
## Formats de scène 3D

La représentation des objets virtuels créés par les logiciels de modélisation 3D nécessite un format de données spécifique car les formats précédents sont inadaptés. En effet, pour représenter un objet 3D, il faut au minimum une description :
* de la topologie de l'objet : sa forme, sa taille et sa complexité ;
* des attributs de représentation : couleurs, textures (nature et position), qualité photométrique de sa surface, transparence ;
* de ses attributs dynamiques s'il est animé : capacité de collision avec d'autres objets, articulations et contraintes, etc.
Représenter une scène nécessite aussi de spécifier les éclairages utilisés, les positions relatives des objets, les effets d'environnement éventuels mais surtout sa structure hiérarchique (liens des éléments entre eux).
Les premiers formats standard de fait ont été des formats adaptés à la CAO : l'objet est défini à l'aide de facettes ou de surfaces analytiques. Il suffit de définir son origine puis les coordonnées caractéristiques des éléments dans l'espace à 3 dimensions. Par exemple, dans le format DXF d'Autocad, un objet est une suite d'entités nommées et constituées de liste de points X, Y, Z. Par indexation, on constitue des facettes triangles ou des lignes qui s'appuient sur ces points.
Si ce format était suffisant pour du dessin technique il était totalement inadapté à la réalité virtuelle. Dans les années 1990, la société Silicon Graphics (constructrice de station graphique 3D) publia le format Inventor qui comportait la majorité des éléments nécessaires. Ce format évolua vers le format VRML qui a été normalisé.
Par ailleurs, le format 3D Studio ASCII fut lui aussi publié mais l'explosion du marché de la 3D donna naissance à quantité de formats propriétaires. Pour l'utilisateur, le problème était fréquemment de convertir un modèle d'un format à l'autre sans perdre trop d'informations. Des sociétés se sont même spécialisées dans ce type de conversion.
Actuellement, dans le monde professionnel, il n'y a pas de format unique mais plutôt des formats plus ou moins utilisés selon le type d'application. Par exemple :
* format Blender pour la création Multimédia ;
* format Pro/Engineer pour la CAO industrielle ;
* format OpenFlight pour la simulation de vol et/ou de conduite.
Néanmoins, la plupart des modeleurs 3D savent plus ou moins bien lire (Import) et créer (Export) plusieurs formats : c'est un critère de choix important. Parmi les formats les plus répandus on peut citer :
* BLEND de Blender ;
* 3DS ;
* DXF d'AutoCAD ;
* IGES normalisé ;
* X Direct 3D ;
* OBJ de Wavefront ;
* LWO de LightWave 3D ;
* VRML avec ses versions (1, 2 et X3D) ;
* .COB de TrueSpace (en).
La tendance actuelle est de privilégier un format descriptif de type XML. Le format de données 3D est alors appelé langage descriptif comme X3D (évolution du VRML avec un formatage XML).
Le format libre COLLADA permet également d'échanger des données entre différents logiciels. Il existe notamment un importeur/exporteur pour Blender.

## Formats de son

Les formats de son se décomposent en trois parties :
* les formats bruts : le son n'est pas compressé, les valeurs issues de la conversion des valeurs analogiques en numérique (échantillonnage) sont enregistrées dans l'ordre chronologique et par canal ;
* les formats compressés : le son est compressé avec ou sans pertes suivant un algorithme adapté à la perception des sons de l'oreille humaine et/ou une compression classique ;
* les formats de flux (stream) : permet l'écoute par partie sans avoir la totalité du fichier.
(Voir le chapitre Formats classiques)

## Compression des données

La compression des données est la technique qui consiste à transformer les données afin qu'elles prennent moins de place. Les données devant être décompressées avant d'être traitées, ceci se fait aux dépens de la rapidité, et avec un risque plus grand de perte de données.
L'idée de base est qu'en général, des éléments se répètent dans les fichiers. On a donc intérêt à représenter les éléments se répétant souvent par des nombres plus petits (c'est-à-dire prenant moins de bits).
On peut distinguer deux types de compression :
* les compressions sans a priori sur les données : ce sont des algorithmes qui travaillent uniquement sur les nombres, quelle que soit l'information portée par ces nombres ; ils sont donc généraux, pas spécifiques aux données ; on peut distinguer :
** les algorithmes à table stockée : l'algorithme fait une première analyse pour repérer les éléments se répétant, et construit une table de correspondance avec un code raccourci pour chaque élément répétitif ; la taille occupée par la table de stockage fait que ce procédé est plutôt adapté aux gros fichiers,
** les algorithmes à table construite à la volée : la table de correspondance est construite de manière systématique, sans analyse préalable du fichier ; elle peut être reconstruite à la volée à partir du fichier compressé ; c'est par exemple le cas de l'algorithme de Lempel-Ziv-Welch (LZW) ;
* les compressions spécifiques aux données : si l'on connaît les données, on peut optimiser l'algorithme ; par exemple si l'on sait que l'on a affaire à un texte, on peut se baser sur la fréquence d'utilisation des mots dans le langage ; on distingue deux sous-catégories :
** les compressions sans perte d'informations,
** les compressions avec perte de données : la première idée est de faire un « sous-échantillonnage », c'est-à-dire de simplement dégrader la qualité des données en étudiant les sens et la manière dont le cerveau interprète les informations, on peut dégrader certaines caractéristiques des données peu sensibles, donc sans trop altérer la qualité globale des données ; ainsi, si l'oreille humaine est peu sensible à certaines gammes de fréquences, on peut dégrader (voire supprimer) certaines parties du spectre et pas d'autres (MP3); les algorithmes de compression d'image (JPEG) et de film (MPEG) utilisent une perte de qualité.

## Formats classiques

Formats de fichiers :
| Catégorie | Formats |
| Images | PNG, MNG, TIFF, JPEG, GIF, TGA, OpenEXR, BMP, FITS (en) |
| Dessin vectoriel | VML, SVG, Silverlight, SWF, AI, EPS, DXF |
| 3D | XCF, BLEND, SKP, (SKB), DXF, 3DS Max, C4D, VRML, X3D, IFC, DWG |
| Son | OGG, FLAC, MP3, WAV, WMA, AAC |
| Vidéo | MPEG, OGM (DVD, DivX, XviD), AVI, Theora, FLV, MP4 |
| Page | PDF, PostScript, HTML, XHTML, XML, PHP |
| Document de traitement de texte | ODT, TXT, DOC, RTF |
| Exécutable | BIN, ELF, EXE, SDC, BAT |
| Archives (fichiers généralement compressés) | 7Z, TAR, GZIP, ZIP, LZW, ARJ, RAR, SDC |
| Archives pour bandes dessinées (formats identiques aux formats d'archive sur lesquels ils sont basés: seul l'extension du fichier diffère) | CB7 (.cb7), basé sur 7z CBA (.cba), basé sur ACE CBR (.cbr), basé sur RAR CBT (.cbt), basé sur TAR CBZ (.cbz), basé sur ZIP |

## Formats de données et vie privée

Lorsqu'un fichier est transmis à d'autres personnes, certains formats de fichiers peuvent poser un risque informatique concernant la vie privée du créateur de fichier. En effet certains incluent dans leur format de données des informations personnelles telles que le nom de l'ordinateur et celui de l'utilisateur.
Cela arrive le plus souvent lors d'usage de logiciels de bureautique. Dans le cas de ces logiciels, ce n'est pas seulement le nom de la personne ayant créé le fichier qui est sauvegardé, mais aussi celui de la personne l'ayant modifié ensuite.
Plus rarement les fichiers HTML contiennent parfois aussi des informations personnelles, en particulier lorsqu'ils sont exportés depuis un logiciel bureautique (exemple : Microsoft Word). Toutefois il est facile de le vérifier en affichant le code HTML.

### Exemples de format de données contenant des « informations cachées »

* Fichiers PDF
Microsoft propose des informations pour retirer des données personnelles cachées dans les fichiers :
* Excel 2007, PowerPoint 2007, Word 2007 ;
* Excel 2010 et 2013 ;
* Word 2010 et 2013$^,$ ;
* Office XP (dit 2002) et Office 2003 (c'est-à-dire Word, Excel, et Powerpoint) pour lesquels Microsoft a sorti en 2004 un logiciel nommé RhdTool (« Remove Hidden Data Tool »).