Cambiar la codificación de caracteres de un archivo

La codificación de caracteres de los archivos nuevos en la mayoría de sistemas es UTF-8, ya que permite la representación de todos los glifos Unicode, y en el caso de los caracteres latinos utiliza un único byte, o dos a lo sumo.

Sin embargo, no ocurre con poca frecuencia que encontremos archivos en una codificación con la que nuestros programas no pueden trabajar a priori.

Para resolver esto, existe el comando iconv:

iconv --help
Modo de empleo: iconv [OPCIÓN...] [FICHERO...]
Convierte la codificación de los ficheros dados de una codificación a otra.

 Especificación de formato de Entrada/Salida:
  -f, --from-code=NOMBRE     codificación del texto original
  -t, --to-code=NOMBRE       codificación para el resultado

 Información:
  -l, --list                 lista todos los juegos de caracteres conocidos

 Control del resultado:
  -c                         se omiten los caracteres inválidos en la salida
  -o, --output=FICHERO       fichero de salida
  -s, --silent               suprime los avisos
      --verbose              muestra información sobre el desarrollo

  -?, --help                 Da esta lista de ayuda
      --usage                Da un mensaje corto de uso
  -V, --version              Muestra la versión del programa

Los argumentos obligatorios u opcionales para las opciones largas son
también obligatorios u opcionales para las opciones cortas correspondientes.

Para instrucciones sobre informes de fallo, por favor consulte:
<http://bugs.opensuse.org>.

Podemos crear un archivo UTF-8, por ejemplo de la siguiente manera:

echo "El ñame redondo se usó para fabricar un lápiz" > utf8.txt

Para comprobar que está codificado como UTF-8:

file utf8.txt
utf8.txt: Unicode text, UTF-8 text

Lo traducimos a UTF-16 usando iconv:

iconv -t utf-16 -o utf16.txt utf8.txt
file utf16.txt
utf16.txt:   Unicode text, UTF-16, little-endian text