Problemas de encoding ejecutando en consola de linux, para variar.
bameda
bameda en gmail.com
Jue Feb 15 20:16:40 CET 2007
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
|____________________________________________
Más información sobre la lista de distribución Python-es