[pyar] problemas con unicode

Miguel Barraza correo en miguelbarraza.com.ar
Jue Mayo 23 19:40:53 ART 2013


Subject: Re: [pyar] problemas con unicode


2013/5/23 Miguel Barraza <correo en miguelbarraza.com.ar>:

> donde decía que la variable para codificarla debo hacerlo con la u:
> variable=u'texto'
> ahora bien, como se hace con las listas?. ya que si  hago:
> lista=[u'hola', u'¿cómo estás?']

Una lista no tiene nada que ver con el problema actual. Una lista,
conceptualmente, no se puede "pasar a unicode"....


> en el caso de:
> u'¿cómo estas?'
>
> me genera un error al tratar de mandarlo:
> msg=msg.encode('utf-8')
>        self.request.send(msg+"\n")

¿Qué error te genera? Estás haciendo lo correcto en este caso:

1. arrancás de un texto unicode
2. lo convertís a bytes
3. lo escribís en el socket


> imagino porque debo declarar que la lista tiene que estar en unicode. y 
> ahí
> mi problema. como debo hacer?.

No, la lista no puede estar en unicode.

Pero viendo tu confusión... en el ejemplo anterior "msg" es el texto o
la lista???>>>

msg es el texto. es un string.
en el caso de la lista la utilizo cuando debo responder un mensaje que el 
motor no entiende el comando ingresado, entonces tengo una lista con las 
respuestas, y elijo una al lazar con un random:
random.choice(self.comocomo)

el self.comocomo, es las listas de respuestas.
que luego guardo el resultado en msg y lo envío por el socket, en respuestas 
sensillas funciona bien:
'no te entiendo'
'que dices?'.

pero en respuestas de este tipo:
'?cómo?'

al enviar genera un error, y se cierra el socket.
decidí hacer una prueba en el interprete y aqui me genera un error:

>>> l=['hola','¿cómo?']
>>> print l[0].encode('utf-8')
hola
>>> print l[1].encode('utf-8')
Traceback (most recent call last):
  File "<pyshell#7>", line 1, in <module>
    print l[1].encode('utf-8')
UnicodeDecodeError: 'ascii' codec can't decode byte 0xbf in position 0: 
ordinal
not in range(128)

cual sería aqui la solución?.

gracias.

atte, Miguel 




More information about the pyar mailing list