Un décodage est une fonction sur un sous-ensemble fini d'entiers naturels (les codes) vers un ensemble dont les éléments sont les choses codées : caractères, groupes ou parties de caractères, actions, positions, sons, couleurs. Un décodage n'est pas nécessairement défini sur un seul intervalle ni injectif (ou univoque). Un codage est une fonction inverse d'un décodage. En gros, coder est numériser.
Par exemple, sur le site Paypal (an 2022 !), ISO 8859-1 est utilisé incorrectement au lieu d'UTF-8 :

Codage de caractère incompatible avec ASCII : EBCDIC d'IBM.
Pour représenter le placement du signe suivant, sans rien écrire, on utilise l'espace ou une balise commençant par le caractère d'échappement \ suivi d'une lettre autre que \ (et \\ désigne le \ normal).
ASCII :
| placement de signe suivant | balise | code |
|---|---|---|
| nouvelle ligne | 0x0A | |
| nouvelle page | 0x0C | |
| retour de chariot | 0x0D | |
| tabulation | 0x09 | |
| espace | 0x20 |
Les autres nombres de 0x00 à 0x1F et 0x7F ne codent aucun caractère ou placement de signe suivant.
ISO 8859-1 :
| placement de signe suivant | balise | code |
|---|---|---|
| espace insécable | 0xA0 | |
| césure optionnelle | 0xAD |
La représentation du saut de ligne dépend du système d'exploitation :
| système d'exploitation | saut de ligne |
|---|---|
| Mac OS 9 | \r |
| Unix | \n |
| DOS | \r\n |
Le code de saut de ligne DOS est probablement inspiré du fonctionnement des anciennes machines à écrire, qui permettaient de faire un retour de chariot en restant sur la même ligne, ce qui était utile par exemple pour souligner.
Le caractère accentué « é » peut être décomposé en « e » suivi du caractère accent aigu combinant, qui se trouve être en réalité à la fois un caractère et une instruction de placement. Précisément, « é » peut être codé, en UCS-2 : U+0065 U+0301, en UTF-8 : 0x65 0xCC 0x81. Quand on rencontre un 0x65 dans une suite d'octets (sans séparateur explicite) de code UTF-8, on ne peut pas savoir quel caractère est codé exactement (é, è, ë…), avant d'avoir lu les deux octets suivants. Autrement dit, si on considère « é » comme un caractère, le principe de séparation énoncé plus haut n'est pas valable pour le codage UTF-8.
Vu l'ennui de la chose et la minorité de développeurs concernés par les langues utilisant un alphabet latin étendu, la décomposition n'est pas totalement supportée par de nombreux programmes prétendus compatibles avec Unicode.
Le codage d'un texte devrait être indiqué quelque part, au début ou à la fin. Cependant, cela pose en principe un problème d'auto-référence : quel codage utiliser pour préciser le codage ? De plus, si le texte est découpé, alors l'indication de codage est perdue dans le reste des morceaux. Alors il est impossible de garantir un décodage correct.
Emacs, recode, charconv, iconv recodent les textes. ftp en mode texte recode les sauts de ligne. MIME recode le courrier électronique.
Une cause fréquente de corruption de fichier binaire (ne codant pas que des caractères) est un décodage-recodage, comme s'il s'agissait d'un texte. Par exemple, si on envoie un binaire exécutable avec ftp en mode texte, alors il ne fonctionnera plus forcément à l'arrivée. De plus, si le décodage initial est non injectif, alors la corruption est irréversible.
Linux supporte la décomposition, alors que Mac OS X la force, recodant les noms de fichier en provenance d'autres sytèmes, ce qui peut pertuber les programmes de copie (comme rsync) : une copie de Linux vers Mac puis de Mac vers Linux crée un doublon du côté Linux.
Le programme convmv recode les noms de fichier.
Le séparateur entre nom de répertoire et nom de fichier dépend aussi du système (Mac : :, Unix : /, DOS : \).
Un format de fichier est une représentation adaptée à une application particulière. Un fichier peut être rattaché à une application à l'aide d'une extension de nom de fichier (après le dernier point). Historiquement, DOS était limité à une extension de trois caractères.
| nom | créateur | usage | texte ou binaire | extension | lecteur | source |
|---|---|---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
||||
|
|
|
|
|
|||
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
Pour éviter de corrompre un fichier par transmission, on peut le représenter au format BinHex ou Base64, qui n'utilise que des caractères ASCII, ce qui le rallonge et, s'il codait un texte, le rend illisible en ASCII.
Pour éviter de mal décoder un fichier codant des caractères non ASCII ou placements de signe suivant, on peut les représenter en caractères ASCII. Par exemple, la balise de saut de ligne est <br>. C'est ainsi que HTML passe partout ou ASCII est reconnu.
Un format de fichier propriétaire (non public) compromet la portabilité, voir formats-ouverts.org.
Dernière modification : (2023-06-12 13:52:55 WEST)