2012-03-29 24 views
26

Mi programa funciona justo en la línea de comandos, pero cuando lo ejecuto como una tarea programada que se estrella en el error:UnicodeEncodeError solamente cuando se ejecuta como una tarea programada

UnicodeEncodeError: 'ascii' codec can't encode character 
u'\xa7' in position 13: ordinal not in range(128) 

Se estrella en el estado de

print title 

¿Por qué ocurre esto solo cuando la aplicación se ejecuta como un trabajo cron? ¿Cómo podría ser esto solucionado?

I intentaron (sin ayuda):

print unicode(title) 

Python es 2,7

+1

Ver http://stackoverflow.com/questions/492483/setting-the-correct-encoding-when-piping-stdout-in-python –

+0

Creo que es el mismo problema; Python 2 usa Unicode cuando stdout es un terminal pero no cuando es un conducto (como lo sería en un trabajo cron). –

Respuesta

4

Aparte: Este es un problema común; como tal, esta es probablemente una pregunta duplicada.

La codificación predeterminada en 2,7 es ascii.
Debe proporcionar una codificación para la salida de su programa.
Una codificación común para usar es 'utf8'.

Por lo que haría en su lugar:

print title.encode('utf8') 

Aquí hay una manera de comprobar la codificación predeterminada:

import sys 

sys.getdefaultencoding() 
# -> 'ascii' 
+0

Gracias por la respuesta, pero ¿por qué esto no funciona solo cuando la aplicación se ejecuta como un trabajo de cron? – xralf

+0

... difícil decir en base a la información proporcionada. Puede estar pasando diferentes entradas, por ejemplo. Si funciona o no, no es el problema. Como programador responsable, debería preocuparse de que su código funcione con caracteres que no sean ASCII. – bernie

+0

En realidad, la cadena ha sido tomada de la base de datos SQlite. Era de tipo TEXTO, codificado como UTF-8 http://sqlite.org/datatype3.html. Tal vez Python lo cambió cuando se combinó con otras cadenas mediante "% s% s"% (s1, s2) – xralf

79

No, se puede tener más simple. Simplemente defina PYTHONIOENCODING antes de ejecutar este script. De esta manera:

PATH=<your path> 
[email protected] 
PYTHONIOENCODING=utf8 

* * * * * /run/your/script 
+1

De hecho esta es la respuesta correcta. ¡Guay! :) – mac

+14

Si pudiera, te daría +2. ¡Esta mierda ha estado jugando con mi cabeza! – TTT

+1

Lo que él dijo ... aquí estoy, dos años después, y esto evitó que muchos teclados se rompieran. – mudda

Cuestiones relacionadas