Il existe de nombreux types de fichiers (bureautiques, multimédias, programmes) qui peuvent être regroupés en deux catégories :
- les fichiers textes : ce sont ceux qui peuvent être ouvert avec un “simple”
éditeur de texte car les octets qui forment leur contenus peuvent être représentés
sous forme de caractères imprimables ; exemple la séquence hexadécimale
53 49 4fpeut être représentée par le texte “SIO" :- fichiers contenant des programmes (py, java, php, js, css, html…) ;
- fichiers de données (xml, csv, json, yaml…)
- fichiers textes (txt, md — Markdown)
- les fichiers binaires : les autres :
- fichiers multimédias (images, sons, vidéos) à l’exception des images vectorielles SVG ;
- fichiers bureautiques (odt, ods, docx, xlsx, pdf…)
- les exécutables de programmes compilés, les archives (zip, tar.gz, tar.zstd…)
Remarque : les suites bureautiques LibreOffice et Microsoft Office compressent les documents en zip.
Un éditeur hexadécimal permet de vérifier si un fichier est texte ou binaire ;
par exemple, la commande hexdump -C fichier peut afficher :
00000000 45 74 75 64 69 61 6e 74 73 20 64 65 20 53 54 53 |Etudiants de STS|
00000010 20 53 49 4f 2c 20 62 6f 6e 6a 6f 75 72 2e 0a | SIO, bonjour..|
0000001f
- La première colonne indique le décalage (offset) en nombre d’octets depuis le début du fichier ; la valeur est en hexadécimal (0x10 = 16 — il y a effectivement 16 octets par ligne, chaque octet étant représenté par deux caractères hexadécimaux).
- Les deuxièmes et troisièmes colonnes (2x8 octets) présente le contenu hexadécimal.
- La dernière colonne présente le décodage sous forme de caractères ASCII, si c’est possible : par exemple “0x45” correspond au caractère “E”, 0x74 à “t”, 0x20 à l’espace, 0x2c à la virgule…
Dans le cas d’un fichier binaire, de nombreux octets ne peuvent être représentés par un caractère, ils sont alors remplacés par un point ; exemple :
00000000 89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52 |.PNG........IHDR|
…
00000040 71 a7 45 0b c5 8b bb 3b 14 97 c5 29 50 a0 b8 bb |q.E....;...)P...|
00000050 bb bb db fb 34 f7 ed fc d2 6c 92 dd 85 05 66 33 |....4....l....f3|
…
Plusieurs caractères sont utilisés pour les fins de ligne :
- retour charriot — “CR” (Carriage Return
\r) —0x0d, historiquement utilisé par Apple (avant macOS X) ; - à la ligne — “LF” (Line Feed
\n) — 0x0a, utilisé par les systèmes Linux et BSD (dont macOS) ; - “CR+LF” (soit deux octets), utilisé par Microsoft.
La table des caractères ASCII est limitée aux caractères latins de base, ne prenant pas en charge les caractères accentués et les systèmes d’écriture non latins comme ceux des langues non alphabétiques (chinois, japonais, arabe, hindi…).
Pour représenter ces caractères, il est nécessaire d’utiliser des encodages plus complets, tels que l’UTF-8 (Unicode) capable de représenter l’ensemble des caractères des langues humaines.
UTF-8 utilise de un à quatre octets pour encoder les caractères. Il est compatible avec l’ASCII (caractères latins non accentués encodés sur un octet), et utilise par exemple deux octets pour les accents du français et trois pour le symbole “€”.
ISO-8859 (et sa variante ISO8859-15 pour les langues européennes) est une ancienne norme d’encodage qui encode les caractères sur un seul octet :
- plusieurs variantes sont donc nécessaires, et le décodage nécessite de savoir laquelle est utilisée ;
- certaines langues comprennent plus de 255 symboles et ne peuvent donc pas utiliser cette norme.
La balise <meta charset="…"/> de l’entête d’une page web indique au navigateur
quel est l’encodage utilisé par la page. Si un encodage erroné est annoncé,
cela entraîne des erreurs d’affichage.