Home
Web agali.org
Inicio de sesión de usuario

En línea
En este momento hay 0 usuarios y 35 invitados en línea.

Tira ECOL


Solucionando problema de codificación con sitecustomize.py

Solucionando problema de codificación con sitecustomize.py
Submitted by Mogurito on Jueves, 9 Junio, 2005 - 15:05 Documentos

Despues de marear la perdiz tantas veces y no dar con la tecla de la codificación en Python, al fin he dado con la solución (lo mio me ha costao). Os cuento primero el problema.

Python, maneja dos tipos de cadenas: ascii y unicode. El proyecto, evidentemente hace uso para todas las cadenas de informe de las cadenas unicode, para así poder usar caracteres acentuados. Entonces empiezan los problemas y se tiene que reconocer, de alguna forma, la codificación de caracteres unicode que se está usando, es decir la misma codificación de caracteres que utiliza el código fuente. En mi caso, estoy escribiendo todo el código fuente con ISO-8859-15 (Europeo Occidental), entonces he de marcar con un comentario al principio de cada código fuente la codificación que usa el archivo, algo como: # -*- coding ISO-8859-15 -*-. Pero claro, con esto solucionariamos más bien poco y Python, comenzará a volverse un poco kiskilloso cuando empiece a tratar con documentos no escritos en ISO-8859-15, o vete a saber. Entonces, la primera solución que nos viene a la mente es modificar alguna propiedad de módulo sys que tenga que ver con la codificación. Pues bien, resulta que cuando se inicia, importa el módulo site que se encarga de establecer la codificación por defecto (ascii) y luego elimina una función del módulo sys que se llama setdefaultencoding. O sea, que si cuando iniciamos e importamos sys, no podremos hacer uso de la función 'sys.setdefaultencoding' por que ha sido previamente eliminada.

¿Y ahora que hacemos?, Pues despues de un mes leyendo acerca de la codificación en Python, encontré que el módulo site, buscará un módulo sitecustomize.py en el path, lo importará si existe y finalmente eliminará la función 'sys.setdefaultencoding'. Sigue los siguientes pasos:

  1. Establece la codificación por defecto a 'ascii' con la función 'sys.setdefaultencoding'
  2. Busca e importa el módulo sitecustomize.py
  3. Elimina la función 'sys.setdefaultencoding'

Entonces la única posibilidad es cambiar la codificación desde el 'sitecustomize.py' que debe de figurar en algún sitio de los path. Este sitecustomize importará el módulo sys y llamará a la función 'sys.setdefaultencoding('iso-8859-15'), al menos en mi caso.

Bien pero el problema es: ¿Donde ponemos sitecustomize.py?, como solución rápida, PERO INCORRECTA, es ponerlo en el path principal de Python, '/usr/lib/python2.4'. Es incorrecto por que todas las aplicaciones que usen Python, se ejecutarán con la codificación 'iso-8859-15'.

  • ¿Podemos cambiar el path desde nuestro script?, Si pero aun así, una vez que carga el script ya ha llamado a 'site.py' y por lo tanto, da igual que cambiemos el path por que no volverá a cargar 'site.py'.
  • ¿Podemos volver a importar site.py? Si, pero no serviría de nada por que la función 'sys.setdefaultencoding' ya ha sido eliminada.

Solución: Despues de pasar un mes con el problema sin buscar una solución oportuna, di con la tecla de la forma más sencilla: LEYENDO EL MAN DE PYTHON. Resulta que tiene una opción '-S' que tiene como función no cargar site al iniciarse. Esto nos da la posibilidad de añadir al 'sys.path' donde se encuentra nuestro querido 'sitecustomize.py' y luego importar 'site.py', que ya se encargará de cargarlo.

Duda: ¿Por qué no en vez de añadir el path donde se encuentra 'sitecustomize.py' no ejecutamos mejor 'sys.setdefaultencoding', que aun no ha sido eliminado?, Pues por que si te fijas en la lógica que sigue, cargará la codificación por defecto 'ascii' con lo que sobreescribirá la que hayamos establecido.

Conclusión: No se por que no he encontrado esta solución por ninguna parte y desde mi punto de vista es la mejor. Un alivio haber dado con ella a las 4 de la mañana 5 dias antes de entregar el proyecto. Así que espero que os sirva tanto como a mi.

¿No es este un mundo feliz? :D


[ Inicie sesión o regístrese para enviar comentarios | 6411 lecturas ]

Sponsors


Camisetas
Camisetas

Comentarios recientes


¡STOP a las Patentes de Software! Esta página usa software libre: Apache | MySql | Php | Drupal
Diseño y mantenimiento: Mogurito