Comment puis-je modifier 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 le codage unicode d’un fichier? J’essaie ce qui suit, 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 dire qu’il pouvait “définir fileencoding = utf-8, puis mettre à jour et écrire le fichier, et ça marche”, mais il me semble qu’il manque quelque chose, sinon il était confus. Je ne sais pas ce qu’il voulait dire par “puis mettre à jour”.

De la doc :

: écrire ++ enc = utf-8 russian.txt

Vous devriez donc pouvoir changer l’encodage dans le cadre de la commande d’écriture.

Notez qu’il y a une différence entre

  définir l'encodage 

et

  définir le codage de fichier 

Dans le premier cas, vous allez modifier le codage de sortie affiché dans le terminal. Dans le second cas, vous allez modifier l’encodage de sortie du fichier écrit.

En utilisant vim pour faire, il est parfaitement possible, pourquoi ne pas simplement utiliser iconv? Je veux dire – charger un éditeur de texte juste pour faire la conversion de l’encodage, c’est comme utiliser un marteau trop gros pour un clou trop petit.

Juste:

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

Et tu as fini.

Tout comme vos étapes, la définition du codage de fichier devrait fonctionner. Cependant, je voudrais append un “set bomb” pour aider l’éditeur à considérer le fichier comme UTF8.

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

Il pourrait être utile de changer l’ encodage 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 .