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