Tengo una bastante grande python 2.6 aplicación con un montón de instrucciones de impresión espolvoreado sobre. Estoy usando cadenas unicode en todo, y por lo general funciona muy bien. Sin embargo, si la redirección de la salida de la aplicación (como «myapp.py >output.txt»), entonces a veces tengo errores como este:

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

Supongo que el mismo problema viene de que si alguien tiene establecido su configuración REGIONAL a ASCII. Ahora bien, entiendo perfectamente la razón de este error. Hay personajes en mis cadenas Unicode que no es posible codificar en ASCII. Justo lo suficiente. Pero me gustaría que mi programa en python para hacer un mejor esfuerzo para tratar de imprimir algo comprensible, tal vez, omitiendo el sospechoso caracteres o sustitución de ellos con su Unicode ids.

Este problema debe ser común… ¿Cuál es la mejor práctica para el manejo de este problema? Yo preferiría una solución que me permite seguir usando el viejo y simple «imprimir», pero puedo modificar todas las apariciones, si es necesario.

PS: ahora he resuelto este problema. La solución no era ni de las respuestas dadas. He utilizado el método dado en http://wiki.python.org/moin/PrintFails , dado por ChrisJ en uno de los comentarios. Es decir, puedo reemplazar sys.stdout con un contenedor que llama unicode codificar con los argumentos correctos. Funciona muy bien.

InformationsquelleAutor Mats Ekberg | 2011-02-24

3 Comentarios

  1. 18

    Si eres de dumping para un terminal ASCII, codificar manualmente con unicode.encode, y especificar que los errores deben ser ignorados.

    u = u'\xa0'
    u.encode('ascii') # This fails
    u.encode('ascii', 'ignore') # This replaces failed encoding attempts with empty string

    Si desea almacenar los archivos unicode, intente esto:

    u = u'\xa0'
    print >>open('out', 'w'), u # This fails
    print >>open('out', 'w'), u.encode('utf-8') # This is ok
  2. 5

    Ahora he resuelto este problema. La solución no era ni de las respuestas dadas. He utilizado el método dado en http://wiki.python.org/moin/PrintFails , dado por ChrisJ en uno de los comentarios. Es decir, puedo reemplazar sys.stdout con un contenedor que llama unicode codificar con los argumentos correctos. Funciona muy bien.

    • No veo ningún comentario en la página dada. Puede reproducir su solución aquí?
  3. 2

    Ya sea envolver todo su instrucción de impresión a través de un método que realice cualquier unicode -> utf8 conversión o como último recurso cambiar el Python por defecto la codificación de ascii a utf-8 en el interior de su site.py. En general es una mala idea impresión de cadenas unicode sin filtrar a sys.stdout desde Python, se activará una implícito de conversión de cadenas unicode a la configuración predeterminada de la codificación, que es el ascii.

Dejar respuesta

Please enter your comment!
Please enter your name here