Puede que alguna vez hayas tenido que pasar datos de un fichero en algún formato extraño a una BD u otro tipo de repositorio. En el proceso de exportación/importación de los datos puede haber problemas con los juegos de caracteres ya que en aplicaciones del mundo antiguo (vease DOS etc) en lenguajes tenebrosos (COBOL, Pascal, etc...) vete a saber los juegos de caracteres que se usaban.
A veces tendrás que sacar los datos de un fichero en formato DBF, cosa fácil usando un script propio
o uno más profesional como dbf_dump.
Una vez tienes el fichero puedes echar un ojo (a ojo) si te salen las tildes y las Ñs, o bien puedes echar mano del comando file. Puede que los caracteres salgan mal y file diga esto:
linux$ file -i fichero.csv
fichero.csv: text/plain charset=unknown
linux$
Ups! Vale, qué no punda el canico. Sabemos que disponemos del comando iconv para hacer la conversión de caracteres. El formato es así:
linux$ iconv --from=JUEGO_DE_CARACTERES_ORIGEN --to=JUEGO DE CARACTERES_DESTINO fichero.csv > resultado.csv
Pero estamos en las mismas. Sabemos lo que queremos, tenemos la herramienta, pero no conocemos el JUEGO_DE_CARACTERES_ORIGEN.
Bueno, la informática permite hacer el burro y probar los 1000y poco juegos disponibles con iconv y un simple bucle.Y uno, como es muy bruto y a veces no se tiene tiempo de investigar más y de documentarse sobre los juegos de caracteres de DOS y tal pues nada, todos al bucle y a ver cuál funciona.
Primero necesitamos la lista de juego de caracteres:
linux$ for i in `iconv -l`; do echo $i; done > juegos.txt
Con eso generamos la lista, quizá haya que editarla y reemplazar caracteres \\, vale, no me apetece buscar la orden sed, no me la "sed" de memoria (festivaaaal del humooor).
Y ahora vamos a lo bruto. En un bucle for sacamos las 10 primeras líneas del fichero misterioso y vamos probando cada uno de los juegos de caracteres, guardando el resultado en un fichero con el nombre modificado:
linux$ for i in `cat juegos.txt`
do
echo -n Convirtiendo ${i}
head fichero.csv | iconv --from=$i --to=UTF-8 > fichero.${i}.csv
echo done
done
linux$
Echamos un ojo a los resultados, con un GREP que busque una línea concreta eta kitto!!
Puede que el juego sea un 850 o similar.
5 comments |
PELMAlink |
Comments
says:
qee ice illo si yo soy de los cortioosss
+-0 of 0
in May 12, 2010, 12:25 pm
says:
www.insurguideonline.com/ health insurance plans =]] www.myinsurersguide.com/ life insurance 9065 www.bestallinsurers.com/ state auto insurance ymmlbs www.insurlist.net/ car insurance rates 8O
+-0 of 0
in May 12, 2011, 4:45 am
says:
www.insurpartners.com/ life insurance %-((( www.getcarinsur.com/ car insurence vzwt www.insursmarket.com/ standard life insurance 3509
+-0 of 0
in May 14, 2011, 1:09 pm
says:
www.insurpartners.com/ life insurance 3671 www.insursmarket.com/ life insurance company 61632 www.shannondawnphotography.com/cheap_auto_insurance.html classic car insurance 8-]
+-0 of 0
in May 15, 2011, 6:15 pm
says:
vlxsahn cheapqviagra.net/ viagra online >:-[ cheapqviagra.com/ viagra 6733 cheapqcialis.net/ cheap cialis 8632 cheapqcialis.com/ cialis QqOzL
+-0 of 0
in February 2, 2012, 12:42 am