Problemas de encoding ejecutando en consola de linux, para variar.

Xin Xic xinxic en gmail.com
Vie Feb 16 12:12:20 CET 2007


Eso me pasó ayer, pero solo ejecutando el script des del cron.
Algo muy estraño. Quizà fué también por la shell "ksh".

Tendré que comprovar-lo.
Al final opté por no imprimir ningun acento.


El 15/02/2007, a les 20:16, en/na bameda va escriure:

> Hola listeros,
>
> tengo un problema y necesito de vuestra ayuda:
>
> Estoy haciendo una aplicación que recibe información de un archivo XML
> y del teclado. Lo que contiene el archivo XML es un listado de
> Categorías, cada categoria posee una serie de atributos.
>
> para crear un objeto de la clase categoría el codigo es algo asi:
>
> """"""
> #!/usr/bin/env python
> # -*- coding: UTF-8 -*-
> (...)
> class Category:
>        def __init__(self,values):
>                print "Valor: \'" + values[0] + "\'",
>                print " - Tipo de value[0]: ",
>                print type(values[0])
>
>                if values[0] != None: self.__name = 
> values[0].encode('utf8')
>                else: self.__name = ""
>
>                print "Valor: \'" + self.__name + "\'",
>                print " - Tipo de __name: ",
>                print type(self.__name)
>                (...)
> """"""
>
> En primer lugar carga la información de un arhivo XMl y luego realiza
> una determinada acción.Si ejecuto el programa para añadir una
> categoría por teclado (esta es la acción) la salida es la siguiente:
>
> -----
> $ ./winsol.py add_categ
> Valor: 'Ofimática'  - Tipo de value[0]:  <type 'unicode'>
> Valor: 'Ofimática'  - Tipo de __name:  <type 'str'>
> Valor: 'Desarrollo'  - Tipo de value[0]:  <type 'str'>
> Valor: 'Desarrollo'  - Tipo de __name:  <type 'str'>
> Valor: 'Red'  - Tipo de value[0]:  <type 'str'>
> Valor: 'Red'  - Tipo de __name:  <type 'str'>
> Valor: 'Matemáticas'  - Tipo de value[0]:  <type 'unicode'>
> Valor: 'Matemáticas'  - Tipo de __name:  <type 'str'>
> Valor: 'Juegos'  - Tipo de value[0]:  <type 'str'>
> Valor: 'Juegos'  - Tipo de __name:  <type 'str'>
> Valor: 'Técnicas'  - Tipo de value[0]:  <type 'unicode'>
> Valor: 'Técnicas'  - Tipo de __name:  <type 'str'>
> Valor: 'Gráficos'  - Tipo de value[0]:  <type 'unicode'>
> Valor: 'Gráficos'  - Tipo de __name:  <type 'str'>
> Valor: 'Educación'  - Tipo de value[0]:  <type 'unicode'>
> Valor: 'Educación'  - Tipo de __name:  <type 'str'>
> Valor: 'Multimedia'  - Tipo de value[0]:  <type 'str'>
> Valor: 'Multimedia'  - Tipo de __name:  <type 'str'>
> Valor: 'Miscelania'  - Tipo de value[0]:  <type 'str'>
> Valor: 'Miscelania'  - Tipo de __name:  <type 'str'>
> Valor: 'Bases de Datos'  - Tipo de value[0]:  <type 'str'>
> Valor: 'Bases de Datos'  - Tipo de __name:  <type 'str'>
> Valor: 'Sistemas Operativos'  - Tipo de value[0]:  <type 'str'>
> Valor: 'Sistemas Operativos'  - Tipo de __name:  <type 'str'>
> Valor: 'Sistema y Administración'  - Tipo de value[0]:  <type 
> 'unicode'>
> Valor: 'Sistema y Administración'  - Tipo de __name:  <type 'str'>
> Valor: 'No Categorized'  - Tipo de value[0]:  <type 'str'>
> Valor: 'No Categorized'  - Tipo de __name:  <type 'str'>
> Write the "Category Name": Categoría
> Write the "Category Label": none
> Write the "Category Description": none
> Valor: 'Categoría'  - Tipo de value[0]:  <type 'str'>
> Traceback (most recent call last):
>  File "./winsol.py", line 836, in ?
>    winsol.add_category()
>  File "./winsol.py", line 168, in add_category
>    if ( self.__image.add_category( [name, label, description] )):
>  File "/home/pelukas/Proyectos/winsol/trunk/winsollib.py", line 995,
> in add_category
>    cat = Category(category_values)
>  File "/home/pelukas/Proyectos/winsol/trunk/winsollib.py", line 49, in 
> __init__
>    if values[0] != None: self.__name = values[0].encode('utf8')
> UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position
> 7: ordinal not in range(128)
> -----
>
> Por el contrario si quito el metodo encoding aplicado a values[0] el
> error me la dá a la hora de hacer el siguiente __cmp__(), cuando
> ejecuta el lower():
>
> """"
>        ## Compare this Categpry to other category.
>        #
>        # @param other - (Category |  None) Object to compare with this.
>        # @return \b -1 If this < other. \b 0 If this = other. \b 1 If
> this > other on other = None
>        def __cmp__(self,other):
>                if other == None:
>                        return 1
>                if self.__name.lower() > other.get_name().lower():
>                        return 1
>                elif self.__name.lower() == other.get_name().lower():
>                        return 0
>                else:
>                        return -1
> """"
>
> Alguien sabe como puedo resolver este problema. Estoy muy perdido, he
> visto todos los comentarios sobre encoding de la lista y todos los
> enlaces que en ellos se especifican y no logro encontrar respuesta
>
> Gracias de antemano a todo aquel que me haya leído
>
> UN SALUDO.
>
> PD. Mi Editor está en utf8, si en la consola de python solicito el
> encoding me da utf8 y en el XML también esta el encoding como utf8.
>
> -- 
> ____________________________________________
> |
> |    David Barragán Merino
> |    E-mail: bameda en ARROBA@gmail.com
> |    Ingeniería Informática
> |    Universidad Carlos III Madrid
> |____________________________________________
> _______________________________________________
> Python-es mailing list
> Python-es en aditel.org
> http://listas.aditel.org/listinfo/python-es
>




Más información sobre la lista de distribución Python-es