2010-02-08 16 views
20

Tengo un problema con Unicode en Python. Puedo imprimir la multa de salida en un terminal regular, pero si vuelvo a dirigir stdout en otra parte (o captura con el módulo subprocess), puedo obtener una UnicodeEncodeError:UnicodeEncodeError al redireccionar stdout

$ cat example.py 
print u'Example: \u00F1' 
$ python example.py 
Example: ñ 
$ python example.py > /dev/null 
Traceback (most recent call last): 
    File "example.py", line 1, in <module> 
    print u'Example: \u00F1' 
UnicodeEncodeError: 'ascii' codec can't encode character u'\xf1' in position 9: ordinal not in range(128) 

¿Por qué es esto? ¿Cómo puedo arreglarlo?

+1

http://stackoverflow.com/questions/492483/setting-the-correct-encoding-when-piping-stdout-in-python es esencialmente la misma pregunta, las respuestas resolvieron el problema que estaba teniendo (con suerte). . – dbr

Respuesta

8

Las tuberías que no conducen al terminal no tienen una codificación, por lo tanto, necesitará verificar sys.stdout.isatty() y codificar si es necesario.

+3

O (incluso mejor) simplemente codifique siempre. –

+0

Más información sobre cómo definir la codificación: http://www.python.org/dev/peps/pep-0263/ –

+1

No, PEP 263 trata de especificar la codificación * source * y no tiene nada que ver con las codificaciones de salida. –

Cuestiones relacionadas