sábado, octubre 03, 2009

cambiar codificación del código de iso-8859-1 a utf-8

La codificación predeterminada de muchas de las aplicaciones en Linux es la uft-8. La mayoría de nosotros hemos utilizado por varios años la codificación iso-8859-1 (latin1, europeo occidental).

En nuestro caso hemos escrito mucho código python en iso-8859-1 y por lo general nuestras bases de datos utilizan iso-8859-1.

Cambiar la codificación del código (en este caso python) resulta sencillo. El siguiente script bash en el directorio del código resuelve el problema


********************************************************************************
#!/bin/bash

FILES=`ls *.py`;

for FILE in $FILES; do
echo $FILE
sed -i 's/-*- coding: iso-8859-1 -*-/-*- coding: utf-8 -*-/g' $FILE
mv $FILE temp_$FILE
iconv --from-code=ISO-8859-1 --to-code=UTF-8 temp_$FILE> $FILE
rm temp_$FILE
done

*************************************************************************

En el caso de la base de datos (Postgresql) se puede aplicar el comando sobre el dump y con eso se resuelve:

iconv --from-code=ISO-8859-1 --to-code=UTF-8 dump_fuente.sql> dump_utf-8.sql


Si no se desea cambiar la codificación del sistema de base de datos se puede optar por cambiar la codificación hacia la base de datos:

sql=sql.decode('utf-8').encode('iso-8859-1') (esto es sólo necesario si el sql contiene simbolos que deban ser decodificado)

y desde la misma a la inversa:

s.decode('iso-8859-1').encode('utf-8')