Re: encodage d'un fichier

Top Page

Reply to this message
Author: LIGIER Philippe
Date:  
To: Gedeon Legaut, guilde
Subject: Re: encodage d'un fichier
On Mon, 19 Jun 2006 23:50:24 +0200, Gedeon Legaut <gedeon.legaut@???>
wrote:

> bon(jour)soir,
> est-ce qu'il y a un moyen facile de connaitre l'encodage d'un fichier
> (sous emacs par ex, mais je prends ttes les idées) ?
> j'ai cherché si la commande "file" avait cela en option, mais non.
> merci
> Gédéon Légaut
>
>


Au cas où tu utiliserais Vim je t'envois un petit mémo que je m'étais écrit
sur la manière d'encoder des fichiers et relire ces fichiers.

Ça concerne Vim en version 6, en 7 c'est peut re plus simple, mais je n'ai
pas encore regardé.

Vim 6.x et Encodage
-------------------

Comment Vim gère-t-il tout cela ?

Grace à des options évidemment en distinguant :

- l'encodage utilisé pour travailler et afficher le texte du buffeur,
- l'encodage utilisé pour écrire et lire les fichiers.

Les options correspondantes sont :

- encoding    -> pour le buffeur
- fileencoding    -> pour lire et écrire le fichier


Pour éditer le texte du buffeur, on utilisera de préférence un encodage qui traite correctement les accents de
la langue choisie pour manipuler le texte (encodage qui ne va pas forcément être celle utilisée pour écrire le
fichier).

Lorsqu'on lance Vim ou ouvre un nouveau buffeur en cours de session, l'option 'encoding' est automatiquement
positionné en fonction des variables de localisation courant. Donc pas de problème de ce coté, on a besoin de
positionner cette option uniquement pour des cas particulier :

    set encoding=<encodage>


Utiliser ':help encodings' pour connaitre les choix possibles.

Pour lire et écrire un fichier c'est un petit peu moins simple et dans la plupart des cas il faut donner un
petit coup de main à Vim quand il ne peut pas détecter automatiquement l'encodage à utiliser.

Pour écrire un nouveau fichier créé depuis Vim on peut spécifier l'encodage avec lequel le texte sera écrit :

- soit en positionnant l'option fileencoding avant d'écrire

    :set fileencoding=<encodage>


- soit en spécifiant l'encodage au moment d'écrire avec la spécification d'option spéciale ++<opt> :

    :write ++enc=<encodage>  <nom_fichier>


Exemple :

- Première solution :

    :set fileencoding=utf-8
    :w  texte_utf8


- Deuxième solution :

       :w  ++enc="utf-8"  texte_utf8


Remarques :

- On peut utiliser indiféremment "utf-8" ou "utf8",

  - L'option utilisée au moment de l'écriture est mémorisée, si on écrit plusieurs fois le buffeur au cours de
    la session, on n'est plus obligé de répeter l'encodage à utiliser.


Par contre, si on quitte la session, il faudrat spécifier l'encodage au moment de la lecture du fichier si
celui-ci est différent de l'encodage par défaut.

On peut spécifier la lecture de fichier(s) soit au lancement de Vim soit en cours de session. Actuellement le
petit problème est que je n'ai pas encore trouvé l'option qui permet de spécifier l'encodage des fichiers sur
la commande de lancement. On va donc commencer par la méthode en cours de session et on reviendra à l'astuce
utilisable au lancement ensuite.

En cours de session, on utilise le plus souvent la commande ':edit <fichier>' (abréviation :e <fichier>) pour
lire un fichier, mais il en existe de nombreuses autres possibilités : split, new, sview, read, etc. La méthode
permettant de spécifier l'encodage est la même pout toutes donc on utilisera ':edit' dans les exemples.

Par rapport à l'écriture, on n'a pas le choix, il faut spécifier l'encodage au moment de la lecture : l'option
fileencoding d'un buffeur est actualisé par la lecture d'un fichier et non pas l'inverse.

Donc pour lire un fichier codé en "utf-8" on utilise :

    :edit ++enc="utf8"  <nom_fichier>
    ou
    :edit ++enc="utf-8"  <nom_fichier>


L'option fileencoding est mémorisée pour la session et utilisée si on réécrit le buffeur en cours de session,
soit dans le fichier origine, soit dans un autre fichier : la conversion est effectuée si l'option fileencoding
est différente de l'option encoding.

Maintenant que l'on sait lire un fichier encodé en cours de session, on peut se "débrouiller" au lancement de
Vim (en attendant mieux) pour charger un fichier encodé dès le lancement :

    gvim  -c 'e ++enc=utf-8 <nom_fichier'