Especificar/forzar encoding de un fichero en Vim

Vim (o eso creo, perdonadme si no es cierto) utiliza por defecto UTF-8 para la codificación de caracteres. Cuando trabajamos con ficheros de otros sistemas en los que la codificación utilizada es otra (latin1 por ejemplo) es posible que nos encontremos con caracteres ilegibles provocados por el cambio de interpretación del encoding.

Pongamos por ejemplo que tenemos un texto guardado con encoding latin1 (ISO-8859-1), pero el fichero en el que está almacenado tiene especificado el encoding UTF-8. Al leer el fichero nos encontraremos con fallos en caracteres especiales:

$ cat prueba.tmp 
Reducir un grupo de volúmenes no es mucho más complicado, pero sí hay que tener en cuenta
 ciertas pautas. Para poder sacar un volumen físico (Physical volume) de un grupo de
 volúmenes es necesario que ese PV no tenga ningún physical extent (PE) ocupado.
$ file prueba.tmp
prueba.tmp: UTF-8 Unicode text

En este caso, podemos cambiar el encoding del fichero de modo que cuando lo editemos con Vim se utilice el encoding latin1 (ISO-8859-1). Podemos hacerlo del siguiente modo:

Abrimos el fichero con vim:

$ vim prueba.tmp

Una vez dentro modificamos el encoding desde el modo comando a latin1:

Reducir un grupo de volúmenes no es mucho más complicado, pero sí hay que tener en cuenta
 ciertas pautas. Para poder sacar un volumen físico (Physical volume) de un grupo de
 volúmenes es necesario que ese PV no tenga ningún physical extent (PE) ocupado.
~
~
~
~
~
~
~
:set fileencoding=latin1

Guardamos el fichero:

:w

Editamos de nuevo:

:e

Y veremos como el texto ya se visualiza correctamente:

Reducir un grupo de volúmenes no es mucho más complicado, pero sí hay que tener en cuenta
 ciertas pautas. Para poder sacar un volumen físico (Physical volume) de un grupo de
 volúmenes es necesario que ese PV no tenga ningún physical extent (PE) ocupado.
~
~
~

En la propia ayuda de Vim tenemos información sobre fileencodings, ejecutando:

~
~
:help fileencodings
       This sets 'fileencoding' to "iso-2022-jp" if the file does not contain
        non-blank characters.
        When the |++enc| argument is used then the value of 'fileencodings' is
        not used.
        Note that 'fileencodings' is not used for a new file, the global value
        of 'fileencoding' is used instead.  You can set it with: >
                :setglobal fenc=iso-8859-2
       This means that a non-existing file may get a different encoding than
        an empty file.
        The special value "ucs-bom" can be used to check for a Unicode BOM
        (Byte Order Mark) at the start of the file.  It must not be preceded
        by "utf-8" or another Unicode encoding for this to work properly.
        An entry for an 8-bit encoding (e.g., "latin1") should be the last,
        because Vim cannot detect an error, thus the encoding is always
        accepted.
        The special value "default" can be used for the encoding from the
        environment.  This is the default value for 'encoding'.  It is useful
        when 'encoding' is set to "utf-8" and your environment uses a
        non-latin1 encoding, such as Russian.
        When 'encoding' is "utf-8" and a file contains an illegal byte
        sequence it won't be recognized as UTF-8.  You can use the |8g8|
        command to find the illegal byte sequence.
        WRONG VALUES:                   WHAT'S WRONG:
                latin1,utf-8            "latin1" will always be used
                utf-8,ucs-bom,latin1    BOM won't be recognized in an utf-8
                                        file
                cp1250,latin1           "cp1250" will always be used
        If 'fileencodings' is empty, 'fileencoding' is not modified.
        See 'fileencoding' for the possible values.
        Setting this option does not have an effect until the next time a file
        is read.

Otra opción para modificar el encoding de un fichero es iconv, echadle un vistazo a la ayuda:

$ iconv --help
Usage: iconv [OPTION...] [FILE...]
Convert encoding of given files from one encoding to another.

 Input/Output format specification:
  -f, --from-code=NAME       encoding of original text
  -t, --to-code=NAME         encoding for output

 Information:
  -l, --list                 list all known coded character sets

 Output control:
  -c                         omit invalid characters from output
  -o, --output=FILE          output file
  -s, --silent               suppress warnings
      --verbose              print progress information

  -?, --help                 Give this help list
      --usage                Give a short usage message
  -V, --version              Print program version

Mandatory or optional arguments to long options are also mandatory or optional
for any corresponding short options.