2009-04-22 26 views
211

Sono abituato ad usare vim per modificare fine riga di un file:Come posso modificare la codifica di un file con 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 

E 'possibile utilizzare un processo simile per cambiare la codifica Unicode di un file? Sto cercando i seguenti, che non funziona:

$ 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 

ho visto someone say che avrebbe potuto "set fileencoding = utf-8, quindi aggiornare e scrivere il file, e funziona", ma mi sembra di mancare qualcosa, oppure era confuso. Non so cosa intendesse per "aggiorna".

risposta

211

Dal doc:

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

così si dovrebbe essere in grado di cambiare la codifica come parte del comando di scrittura.

+2

collegamento documentazione aggiornato: http://vimdoc.sourceforge.net/htmldoc/usr_45.html#45.4 –

47

Proprio come i tuoi passi, l'impostazione della codifica dei file dovrebbe funzionare. Tuttavia, mi piacerebbe aggiungere un "set bomba" per aiutare l'editore a considerare il file come UTF8.

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

Grazie per la risposta, mi ha portato a saperne di più sul marchio di ordine byte UTF. Tuttavia, l'impostazione di una BOM sembra non necessaria/sconsigliabile per UTF-8 poiché non è un formato a lunghezza di byte fisso come 16 o 32. Vedere [qui] (http://vim.wikia.com/wiki/Working_with_Unicode) per una spiegazione e riferimento. Non è un problema (e nemmeno utile) per Vim, ho solo pensato che le persone dovrebbero solo essere consapevoli che potrebbe causare problemi di compatibilità altrove. – joelhardi

+1

È 'bomba' o' bom', e può essere 'unset'? ** EDIT **: Sì, puoi rimuoverlo tramite 'set nobomb'. – icedwater

+3

Sì, VIm ci imposta la "bomba" (con una b). – ruffin

148

noti che esiste una differenza tra

set encoding 

e

set fileencoding 

Nel primo caso, potrai cambiare la codifica di uscita che viene mostrato nel terminale. Nel secondo caso, cambierai la codifica dell'output del file che è stato scritto.

+1

grazie!Apache stava emettendo utf-8, quindi era php, quindi il browser ha detto, così vim ha detto con 'set encoding', e comunque le pagine hanno mostrato caratteri storti che andavano bene come iso-8859-1. usando 'set fileencoding' ha mostrato una bella 'Latin1' –

71

Mentre usare vim per farlo è perfettamente possibile, perché non usi semplicemente iconv? Voglio dire, caricare l'editor di testo solo per eseguire la conversione della codifica sembra utilizzare un martello troppo grande per un chiodo troppo piccolo.

Just:

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

E il gioco è fatto.

+0

Inoltre, questo può essere facilmente copiato per più file. +1 –

+19

Lato negativo, iconv potrebbe non essere facilmente disponibile su Windows. –

+2

@AdrianoVaroliPiazza né vim. – Mario

3

Potrebbe essere utile per cambiare il encoding proprio sulla linea di comando prima che il file viene letto:

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

Vedi starting, --cmd.

+2

La prima variante dovrebbe funzionare anche su shell * nix. " "Sono necessari solo per sfuggire a tutti i meta caratteri, che di solito non sono ciò che si desidera. – jpaugh

Problemi correlati