IMG_20110512_103336

Solucionando los errores de codificación con iconv

1 Star2 Stars3 Stars4 Stars5 Stars6 Stars7 Stars8 Stars9 Stars10 Stars (No Ratings Yet)
Loading ... Loading ...

Uno de los problemas que seguro hemos tenido todos, es tener un archivo con una codificación, abrirlo con otra y encontrarnos caracteres raros; como el símbolo de copyright, cuadrados, virgulillas encima de las A, etc.

Estos errores se producen porque no los abrimos con la codificación debida. A continuación os pongo un ejemplo:

Tenemos un archivo UTF-8, y lo abrimos con un editor de texto que lo va a interpretar como ISO-8859-1, ¿que es lo que pasará?.

El editor, mediante la norma de codificación de ISO-8859-1, interpretaría el texto codificado en UTF-8 de forma incorrecta. Como si por ejemplo, le dieras a un árabe un texto escrito en castellano, ya que éste empezaría a leerlo de forma errónea de derecha a izquierda, interpretando las palabras incorrectamente. Algo así pasaría a UTF-8 e ISO-8859-1, pero con respecto al número de bytes (y otras normas) para interpretar las letras. En ese caso, nos encontraríamos con símbolos (?), con caracteres “Âa”, etc.

Hasta aquí muy bonito todo ¿pero, cómo me aconsejas solucionar el error?

Para empezar, deberíamos saber dos cosas, que codificación lee nuestra aplicación y en qué codificación está nuestro archivo:

Saber la codificación de nuestro archivo

file --mime-encoding  archivo 

Una vez sabemos la codificación ya podemos pasar a la conversión:

iconv -f codificaciondeentrada -t codificaciondesalida archivodeentrada > archivodesalida

Ejemplo de uso


file --mime-encoding  a.php

iconv -f UTF-8 -t ISO_8859-1 a.php > _a.php

Una de las cosas que estaría genial seria hacer que la función file, devolviera solo la codificación, para concatenarla a la función iconv; con el objetivo de realizar un script que recorra una carpeta y que se asegure que todos los archivos de ésta, están en una codificación determinada. ¿Proponéis algún script? ¿se os ocurre alguna manera?, ¿hacemos caso a las convenciones definidas en el inicio de un proyecto y usáis UTF-8, o solo os dais cuenta al final, cuando las cosas van mal?

  • Jon

    Gran post y gran solución, me viene como anillo al dedo. Gracias!

  • afernandez

    Veo que es una solución para tratar desde Linux, ¿Existe alguna opción para la gran mayoria de equipos en el mundo (ejem, Windows)? Que no sea, claro está, cambiarnos a Linux hehehe.

    La verdad es, que muchas veces nos la juega la codificación de los archivos, y lo peor de todo es que te hace rabiar.

    Buen post, es una solución fácil y efectiva.

    Un saludo

  • Javier

    Esto es lo que pasa en Mac:

    file –mime-encoding aa.txt
    aa.txt: utf-8

    iconv -f UTF-8 -t ISO-8859-1 aa.txt > aa2.txt

    se crea el fichero aa2.txt pero si le paso:
    file –mime-encoding aa2.txt

    me sale:
    aa2.txt: ERROR: (null)

    Con la poca idea que tengo, una pequeña aportación conociendo el encoding de los archivos origen para hacerlo recursivo:

    for files in /folder/*.txt
    do
    iconv -f UTF-8 -t ISO-8859-1 “$files” > “${files%.*}-iso.txt”
    done