¿Cómo puedo convertir múltiples archivos a codificación UTF-8 usando las herramientas de línea de comandos * nix? [duplicar]

Respuestas:

56

iconv convierte entre muchas codificaciones de caracteres. Entonces agregamos un poco de magia bash y podemos escribir

for file in *.txt; do
    iconv -f ascii -t utf-8 "$file" -o "${file%.txt}.utf8.txt"
done

Esto se ejecutará iconv -f ascii -t utf-8en cada archivo que termine en .txt, enviando el archivo recodificado a un archivo con el mismo nombre pero que termine en .utf8.txtlugar de .txt.

No es como si esto realmente hiciera algo a sus archivos (porque ASCII es un subconjunto de UTF-8), sino responder a su pregunta sobre cómo convertir entre codificaciones.

Vinko Vrsalovic
fuente
2
Debe citar var $ i para manejar nombres de archivos con espacios.
Richard Hoskins el
Se va a hacer las cosas, que va a añadir una lista de materiales para una ...
Jason
¿Estás seguro de que iconv agregará una lista de materiales? Tenía la impresión de que no lo haría con UTF-8.
Richard Hoskins
55
Acabo de probar esto con iconv (GNU libiconv 1.11), y no agregó una lista de materiales. Entiendo que iconv solo agregará una BOM si hay una presente en la entrada, que no estaría en ASCII. Las listas de materiales son problemáticas y no son necesarias con UTF-8.
Richard Hoskins el
2
si su versión de iconv no admite el parámetro -o, puede reemplazarlo directamente con >> para usar la redirección de shell.
robar