Un codage est une fonction sur un sous-ensemble fini d'entiers naturels (les codes) vers un ensemble dont les éléments sont les objets codés. Un codage n'est pas nécessairement défini sur un seul intervalle ni injectif. On peut coder non seulement des caractères mais encore des groupes de caractères ou des messages quelconques : dessins, musique, instruction informatique.

Codages de caractère

ASCII
Les caractères !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`\abcdefghijklmnopqrstuvwxyz{|}~ sont codés (dans l'ordre) sur les nombres entiers en base seize 21 à 7E, autrement écrit, 0x21 à 0x7E, qui ont au plus 7 bits (chiffres en base 2).
ISO 8859-1 ou latin-1
C'est un prolongement d'ASCII. Les caractères ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ sont codés sur les nombres entiers 0xA1 à 0xFF, sauf 0xAD. Ces nombres ont 8 bits. Le code de « é » est 0xE9.
ISO 8859-15 ou latin-9
Prolognement d'ASCII, incompatible avec ISO-8859-1, comprenant en particulier les caractères français œŒ€Ÿ.
Mac Roman
Un prolongement d'ASCII, incompatible avec les ISO-8859, utilisé dans Mac OS 9.
Unicode (UCS-2)
C'est un prolongement de ISO 8859-1. Presque tous les caractères de toutes les langues, y compris chinois, japonais, coréen, sont codés sur les nombres entiers de 0 à FFFF, qui ont au plus 16 bits ou 2 octets (1 octet = au plus 8 bits). Pour les langues européennes, un octet sur deux étant toujours nul, Unicode est 100 % redondant.
UTF-8
C'est un prolongement d'ASCII mais ce n'est pas un prolongement de ISO 8859-1, ce qui est une source de confusion. Les caractères ISO 8859-1 non ASCII sont codés sur deux octets, le premier étant 0xC2 ou 0xC3 (À et  en ISO-8859-1). Un code de « é » est 0xC3 0xA9. Les caractères Unicode non ISO 8859-1 sont codés sur trois ou quatre octets. Pour que toute suite d'octets soit univoquement séparable (sans séparateur explicite), aucun code à n octets (n>1) ne doit commencer par un code à n-1 octet(s). Les caractères chinois étant codés sur trois octets (au lieu de deux en Unicode), UTF-8 est 50 % redondant pour le chinois. Pour le français, à cause des caractères non ASCII, UTF-8 est environ 10 % redondant. La redondance d'UTF-8 réalise un compromis mondial, entre États-Unis, Europe et Asie.

Il existe des codages incompatabibles avec ASCII.

Codages de placement du caractère suivant

Pour décrire le placement du caractère suivant, sans l'exécuter immédiatement, on utilise souvent (sauf pour l'espace) une balise, commençant par le caractère d'échappement \ suivi d'une lettre autre que \, alors que \\ signifie le \ normal.

ASCII :

placement de caractèrebalisecode
nouvelle ligne
\n
0x0A
nouvelle page
\f
0x0C
retour de chariot
\r
0x0D
tabulation
\t
0x09
espace
0x20

Les autres nombres de 0x00 à 0x1F et 0x7F ne codent aucun caractère ou placement de caractère mais peuvent avoir d'autres effets.

ISO 8859-1 :
placement de caractèrebalisecode
espace insécable
0xA0
césure optionnelle
0xAD

Le saut de ligne dépend du système d'exploitation :

Mac OS 9 :
\r,
Unix :
\n,
DOS :
\r\n.

Le code de saut de ligne DOS reflète le fonctionnement des anciennes machines à écrire, qui permetaient de faire un retour de chariot en restant sur la même ligne.

Décomposition

En Unicode ou UTF-8, 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 Unicode (en base seize, sur quatre octets) : U+0065 U+0301 , en UTF-8 (sur trois octets) : 0x65 0xCC 0x81. Par conséquent, quand on rencontre un 0x65 dans une suite d'octets (sans séparateur explicite), on ne peut pas savoir quel caractère est codé exactement (é, è, ë…), avant d'avoir lu les deux octets suivants.

La décomposition n'est pas totalement supportée par de nombreux programmes prétendus compatibles avec Unicode.

Corruption par recodage

Il a de nombeux programmes de recodage : en Emacs  : recode, en Unix : charconv, iconv. ftp en mode ASCII recode les sauts de ligne. MIME code le courrier électronique.

Un recodage à mauvais escient est une cause fréquente de corruption. Par exemple, ftp en mode ASCII peut corrompre un fichier binaire (ne codant pas des caractères, par exemple, un executable). Lorsque le nouveau codage est non injectif, le recodage est irréversible.

Le codage d'un fichier 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 fichier est découpé, l'indication de codage risque d'être absente des morceaux.

Pour éviter de corrompre les caractères non ASCII ou les instructions de placement, on peut les remplacer par des balises, écrites uniquement en caractères ASCII ; par exemple, en HTML, la balise de saut de ligne est <br>. Cette approche, verbeuse, est agaçante à la longue, surtout pour les caractères accentués.

Pour protéger un fichier quelconque (peut-être un exécutable), on peut le recoder en caractères ASCII, par exemple, avec BinHex ou Base64.

Codages de caractères pour les noms de fichier, selon le système de fichier

HFS (Mac OS 9) :
Mac Roman,
Linux :
UTF-8,
HFS+ (Mac OS X étendu) :
UTF-8 décomposé, parfois abrégé en UTF-8m ou UTF-8-MAC.

Linux supporte la décomposition, alors que Mac OS X la force, renommant les fichiers 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 séparateur entre noms de répertoire et fichier dépend aussi du système de fichier (Mac  : :, Unix  : /, DOS  : \).

Formats de fichier

Un format de fichier est un codage adapté à une application particulière. Un fichier peut être rattaché à une application à l'aide de l'extension du nom de fichier (la partie du nom 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
hyper text markup language
composeur, éditeur
hypertexte
t
htm html
navigateur
W3C
web archive file format
Internet Explorer
archive web
t+b
waff
Internet Explorer
Microsoft
web archive
Safari
archive web
webarchive
Safari
Apple
postscript
pilote d'imprimante, ghostscript
dessin vectoriel
t
ps eps
imprimante, ghostview
Adobe
xfig
dessin vectoriel
t
fig
xfig
portable data format
Acrobat, pdftex
mise en page
t+b
pdf
Adobe Reader, Preview
Adobe
device independent
tex
dessin vectoriel
b
dvi
xdvi
CTAN
Mathematica
Mathematica
cahier ou extension
t
nb m (ma)
Mathematica Player
Wolfram
stuffit
DropStuff
archive comprimée
b
sit sea
Stuffit Expander
Stuffit
zip
archive comprimée
b
zip
unzip
gzip
fichier comprimé
b
gz
gunzip
gzip
BinHex
transmission sur 7 bits
t
hqx
BinHex Info
tape archive
tar
archive
t+b
tar
tar -x
Unix
image non comprimée
b
tiff
image comprimée
b
jpg jpeg
graphic interchange format
dessin comprimé
b
gif
photo CD
scanner Kodak
photo numérique
b
pcd
iPhoto, Graphics Converter
Word
Word
texte formaté
b
doc
Word, Open Office
Microsoft
rich text format
Word
texte formaté
t
rtf
Word, TextEdit
info
éditeur, makeinfo
hypertexte
t
info
info, Emacs
GNU
ccrypt
ccrypt
chiffrage
b
cpt
ccrypt
Peter Selinger

Les formats de fichier propriétaires (non normalisés) compromettent l'interopérabilité, voir formats-ouverts.org.


Dernière modification : (2017-07-14 22:24:31 CEST)