266 votes

Comment changer l'encodage d'un fichier avec vim ?

J'ai l'habitude d'utiliser vim pour modifier les fins de ligne d'un fichier :

$ file file
file: ASCII text, with CRLF line terminators
$ vim file
:set ff=mac
:wq
$ file file
file: ASCII text, with CR line terminators

Est-il possible d'utiliser un processus similaire pour modifier l'encodage unicode d'un fichier ? J'essaie la méthode suivante, qui ne fonctionne pas :

$ file file.xml
file.xml: Unicode text, UTF-16, little-endian
$ vim file
:set encoding=utf-8
:wq
$ file file.xml
file.xml: Unicode text, UTF-16, little-endian

J'ai vu quelqu'un dit qu'il pouvait "définir fileencoding=utf-8, puis mettre à jour et écrire le fichier, et ça marche", mais il semble que j'ai manqué quelque chose, ou alors il était confus. Je ne sais pas ce qu'il voulait dire par "puis mettre à jour".

286voto

Brian Agnew Points 143181

Desde el doc :

:write ++enc=utf-8 russian.txt

Vous devriez donc être en mesure de modifier l'encodage dans le cadre de la commande d'écriture.

2 votes

Mise à jour du lien de documentation : vimdoc.sourceforge.net/htmldoc/usr_45.html#45.4

187voto

Johan Points 1599

Notez qu'il y a une différence entre

set encoding

y

set fileencoding

Dans le premier cas, vous changerez l'encodage de sortie qui est affiché dans le terminal. Dans le second cas, vous changerez l'encodage de sortie du fichier qui est écrit.

1 votes

Merci ! Apache affichait utf-8, php aussi, le navigateur l'a dit, vim l'a dit avec set encoding et les pages affichaient toujours des caractères mutilés qui étaient bien des iso-8859-1. using set fileencoding a montré un joli "Latin1".

86voto

Bien qu'il soit parfaitement possible d'utiliser vim pour le faire, pourquoi ne pas simplement utiliser iconv ? Je veux dire - charger un éditeur de texte juste pour faire la conversion d'encodage semble être l'utilisation d'un trop gros marteau pour un trop petit clou.

Juste :

iconv -f utf-16 -t utf-8 file.xml > file.utf8.xml

Et vous avez terminé.

0 votes

De plus, il est facile de créer des scripts pour d'autres fichiers. +1

19 votes

L'inconvénient est qu'iconv n'est pas toujours disponible sous Windows.

4 votes

@AdrianoVaroliPiazza ni vim.

60voto

Francis Points 4305

Tout comme vos étapes, le réglage du codage des fichiers devrait fonctionner. Cependant, j'aimerais ajouter un "set bomb" pour aider l'éditeur à considérer le fichier comme UTF8.

$ vim file
:set bomb
:set fileencoding=utf-8
:wq

8 votes

Merci pour votre réponse, elle m'a permis d'en savoir plus sur la marque d'ordre des octets UTF. Cependant, pour information, la définition d'une nomenclature semble inutile/déconseillée pour l'UTF-8 car il ne s'agit pas d'un format de longueur d'octet fixe comme 16 ou 32. Voir aquí pour une explication et une référence. Ce n'est pas un problème (et c'est même utile) pour vim, j'ai juste pensé que les gens devraient être conscients que cela peut causer des problèmes de compatibilité ailleurs.

2 votes

Est-il bomb o bom et peut-elle l'être ? unset ? EDIT : Oui, vous pouvez l'enlever via set nobomb .

7 votes

Oui, le VIm nous a mis en place le bomb (avec un b).

8voto

Hans Ginzel Points 24

Il pourrait être utile de modifier le codage juste sur la ligne de commande avant que le fichier ne soit lu :

rem On MicroSoft Windows
vim --cmd "set encoding=utf-8" file.ext
# In *nix shell
vim --cmd 'set encoding=utf-8' file.ext

Voir démarrage , --cmd .

4 votes

La première variante devrait également fonctionner avec les shells *nix. 'single quotes' ne sont nécessaires que pour échapper à tous les métacaractères, ce qui n'est généralement pas le cas.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X