2009-04-22 4 views
211

Je suis habitué à utiliser vim pour modifier les fins de ligne d'un fichier:Comment puis-je modifier l'encodage d'un fichier avec vim?

$ 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 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 someone say qu'il pouvait « mettre fileencoding = utf-8, puis mettre à jour et d'écrire le fichier, et il fonctionne », mais il me semble manquer quelque chose, ou bien il était confus. Je ne sais pas ce qu'il voulait dire par "alors mise à jour".

Répondre

211

De l'doc:

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

donc vous devriez être en mesure de modifier le codage dans le cadre de la commande d'écriture.

+2

mise à jour lien de documentation: http://vimdoc.sourceforge.net/htmldoc/usr_45.html#45.4 –

47

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

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

Merci pour votre réponse, cela m'a conduit à en apprendre davantage sur la marque de commande d'octets UTF. Cependant FYI, définissant une nomenclature semble inutile/déconseillé pour UTF-8, car ce n'est pas un format de longueur d'octet fixe comme 16 ou 32. Voir [ici] (http://vim.wikia.com/wiki/Working_with_Unicode) pour une explication et référence. Ce n'est pas un problème (et même utile) pour vim, je pensais juste que les gens devraient juste être conscients que cela pourrait causer des problèmes de compatibilité ailleurs. – joelhardi

+1

Est-ce 'bomb' ou' bom', et peut-il être 'unset''? ** EDIT **: Oui, vous pouvez le supprimer via 'set nobomb'. – icedwater

+3

Oui, VIm nous a mis la «bombe» (avec un b). – ruffin

148

Notez qu'il ya une différence entre

set encoding 

et

set fileencoding 

Dans le premier cas, vous allez changer le codage de sortie qui est indiquée dans le terminal. Dans le second cas, vous allez changer le codage de sortie du fichier qui est écrit.

+1

merci!Apache sortait utf-8, de même que php, donc le navigateur disait, donc vim disait avec 'set encoding', et pourtant les pages affichaient des caractères mutilés qui allaient bien comme iso-8859-1. en utilisant 'set fileencoding' a montré un joli 'Latin1' –

71

En utilisant vim pour le faire est parfaitement possible, pourquoi n'utilisez-vous pas simplement iconv? Je veux dire - chargement de l'éditeur de texte juste pour faire la conversion de l'encodage semble utiliser trop gros marteau pour trop petit clou.

Just:

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

Et vous avez terminé.

+0

De plus, cela peut être facilement scripté pour plus de fichiers. +1 –

+19

Downside, iconv peut ne pas être facilement disponible sur Windows. –

+2

@AdrianoVaroliPiazza ni vim. – Mario

3

Il pourrait être utile de changer le encoding juste sur la ligne de commande avant que le fichier est 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 starting, --cmd.

+2

La première variante devrait également fonctionner sur les coquilles * nix. '' sont seulement nécessaires pour échapper tous les caractères méta, ce qui n'est généralement pas ce que vous voulez. – jpaugh

Questions connexes