20.6. Systèmres de Codage

Les utilisateurs de langues diverses ont établi plusieurs systèmes de codage plus ou moins standards pour les représenter. Emacs n'utilise pas en interne ces systèmres de codage ; il convertit plutôt depuis les divers systèmes de codage vers son propre système lorsqu'il lit des données, et convertit le système de codage interne en d'autres systèmes de codage lorsqu'il écrit des données. La conversion est possible pour la lecture ou l'écriture de fichiers, la transmission ou la réception depuis le terminal, et l'échange de données avec des sous-procesus.

Emacs assigne un nom à chaque système de codage. La plupart des systèmes de codage sont utilisés pour une langue, et le nom du système de codage commence avec le nom de la langue. Certains systèmes de codage sont utilisés par plusieurs langues ; leurs noms commencent normalement par iso. Il y a aussi les systèmes de codage spéciaux no-conversion, raw-text et emacs-mule qui ne convertissent pas du tout les caractères imprimables.

En plus de convertir différentes représentations de caractères non ASCII, un système de codage peut aussi réaliser des conversion de fin-de-ligne. Emacs retient trois conventions différentes pour séparer les lignes dans les fichiers : newline, carriage-return linefeed, et seulement carriage-return.

C-h C codage RET

Décrit le système de codage codage.

C-h C RET

Décrit les systèmes de codage actuellement utilisés.

M-x list-coding-systems

Affiche une liste de tous les systèmes de codage supportés.

La commande C-h C (describe-coding-system) affiche des informations sur des systèmes de codage particuliers. Vous pouvez spécifier le nom d'un système de codage en argument ; alternativement, avec un argument vide, elle décrit les systèmes de codage couramment sélectionnés pour divers usages, dans le tampon courant et comme défaut, et la liste de priorité pour reconnaître les systèmes de codage (Section 20.7).

Pour afficher une liste de tous les systèmes de codage supportés, tapez M-x list-coding-systems. La liste donne des informations sur chaque système de codage, dont la lettre qui le représente dans la ligne de mode. (Section 5.3).

Chacun des systèmes de codage qui apparaissent dans cette liste--à l'exception de no-conversion, qui veut dire aucune conversion d'aucune sorte--spécifie comment convertir les caractères imprimables, mais laisse le choix de la conversion de fin-de-ligne être décidé selon le contenu de chaque fichier. Par exemple, si le fichier semble utiliser carriage-return linefeed entre les lignes, alors la conversion de fin-de-ligne sera utilisée.

Chacun des systèmes de codage listés a trois variantes qui spécifient exactement quoi faire pour la conversion de fin-de-ligne :

…-unix

Ne fait aucune conversion de fin de ligne ; suppose que le fichier utilise newline pour séparer les lignes. (C'est la convention normlement utilisée sur les systèmes Unix et GNU.)

…-dos

Suppose que le fichier utilise carriage-return linefeed pour séparer les lignes, et fait la conversion appropriée. (C'est la convention normalement utilisée sur les systèmes Microsoft.)

…-mac

Suppose que le fichier utilise carriage-return pour séparer les lignes, et fait la conversion appropriée. (C'est la conversion normalement utilisée sur le système Macintosh.)

Ces variantes de systèmes de codage sont omises de l'affichage de list-coding-systems pour raison de brièveté, car elles sont tout à fait prévisibles. Par exemple, le système de codage iso-latin-1 a des variantes iso-latin-1-unix, iso-latin-1-dos et iso-latin-1-mac.

Le système de codage raw-text est utile pour un fichier texte presque entièrement ASCII, mais pouvant contenir des octets dont la valeur est inférieure à 127 et ne servant pas à encoder les caractères non ASCII. Avec raw-text, Emacs copie sans les changer ces octets, et met enable-multibyte-characters à nil dans le tampon courant pour qu'ils soient correctement interprétés. raw-text utilise la conversion fin-de-ligne de la manière habituelle, en se basant sur les données rencontrées, et a les trois variantes habituelles pour spécifier le style de conversion de fin-de-ligne à utiliser.

Au contraire, le système de codage no-conversion ne spécifie aucun code de caractère de conversion--aucun pour les valeurs d'octets non ASCII et aucun pour les fin-de-ligne. Il est utile pour lire ou écrire des fichiers binaires, des fichiers tar, et d'autres fichiers qui doivent être examinés verbatim. Il met, lui aussi, enable-multibyte-characters à nil.

La manière la plus facile d'éditer un fichier sans conversion d'aucune sorte est d'utiliser la commande M-x find-file-literally. Elle utilise no-conversion, et supprime aussi d'autres fonctionnalités d'Emacs qui pourraient convertir le contenu du fichier avant qu'il soit affiché. Section 16.2.

Le système de codage emacs-mule veut dire que le fichier contient des caractères non ASCII stockés avec l'encodage interne d'Emacs. Il utilise la conversion de fin-de-ligne selon les données rencontrées, et a les trois variantes habituelles pour spécifier le type de conversion de fin-de-ligne.