101 votes

Comment trouver l'encodage de la mémoire tampon actuelle dans vim ?

Disons que je suis en train d'éditer un fichier avec vim (ou gvim). Je n'ai aucune idée de l'encodage du fichier et je veux savoir s'il est en UTF-8 ou ISO-8859-1 ou autre ? Puis-je demander à vim de me montrer quel est l'encodage utilisé ?

120voto

Loïc Wolff Points 14389

Le paramètre fileencoding indique l'encodage de la mémoire tampon actuelle :

:set fileencoding
fileencoding=utf8

Il n'existe pas vraiment de méthode commune pour déterminer l'encodage d'un fichier en clair, car cette information n'est pas enregistrée dans le fichier lui-même - à l'exception des fichiers UTF-8 pour lesquels vous disposez d'un BOM qui indique l'encodage. C'est pourquoi les fichiers xml et html ont des métabalises charset.

Vous pouvez imposer un encodage particulier à l'aide du paramètre "encodage". Voir :help encoding y :help fileencoding dans Vim pour savoir comment l'éditeur gère ces paramètres. Vous pouvez également ajouter plusieurs paramètres de codage de fichier à votre vimrc pour que vim essaie de les détecter en fonction de ceux qui sont listés.

18voto

dotancohen Points 10796

Notez que l'encodage des fichiers est pas de mention explicite n'importe où dans un fichier. Ainsi, VIM et d'autres applications doivent deviner l'encodage. La façon canonique de le faire est avec la fonction chardet qui peut être exécutée à partir de VIM de cette manière :

:!chardet %

La réponse fournie par jtimberman vous montre l'encodage de l'adresse de l'utilisateur. Tampon actuel qui peut ne pas être le même encodage que le fichier sur le disque. Ainsi, vous remarquerez que chardet affichera parfois un encodage différent de celui de VIM, surtout si vous avez configuré VIM pour qu'il utilise toujours un encodage spécifique (par exemple UTF-8).

Ce qui est bien avec chardet est qu'il donne un score de confiance pour sa supposition, alors que VIM peut se tromper (et se trompe souvent) sur l'encodage s'il n'y a pas beaucoup de caractères au-dessus de la valeur de l'encodage. \x7F (ASCII 127). Par exemple, l'ajout d'un seul à un long fichier de code PHP fait chardet pense que le fichier est ISO-8859-2 avec un taux de confiance de 0,72, alors qu'en ajoutant la phrase légèrement plus longue , ! donne UTF-8 avec un score de confiance de 0,99. Dans les deux cas, set fileencoding? a montré UTF-8 non pas parce que le fichier sur le disque était UTF-8, mais parce que VIM est configuré pour utiliser UTF-8 en interne.

0voto

Pierre-Damien Points 301

J'ai trouvé que : https://vim.fandom.com/wiki/Reloading_a_file_using_a_different_encoding

Vous pouvez recharger un fichier en utilisant un encodage différent si Vim n'a pas pu détecter l'encodage correct :

:e ++enc=<encoding>

donde encoding pourrait être cp850, ISO-8859-1, UTF-8, ...

Vous pouvez utiliser file yourfilename pour trouver l'encodage ou chardetect (fourni par python-chardet ou uchardet selon votre distribution Linux) comme suggéré par dotancohen.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X