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

bameda bameda en gmail.com
Jue Feb 15 22:44:24 CET 2007


-------------------
$ python
Python 2.4.4c1 (#2, Oct 11 2006, 21:51:02)
[GCC 4.1.2 20060928 (prerelease) (Ubuntu 4.1.1-13ubuntu5)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.getdefaultencoding()
'ascii'

-------------------

No, no es seguro, me da "ascii". Juraria que el otro dia cuando lo
probe me daba "utf8". Fallo mio
probare a ver si lo que me comentas funciona, lo que pasa es que es
algo mas complicao porque lo que he comentao es una biblioteca usada
por una interfaz en linea de comandos y otra interfaz web hecha con
web.py y que trata templates con cheeta.

Probare . Gracias

El 15/02/07, Gabriel Genellina <gagsl-py en yahoo.com.ar> escribió:
> En Thu, 15 Feb 2007 16:16:40 -0300, bameda <bameda en gmail.com> escribió:
>
> > 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])
>
> En general conviene usar repr() para debug, porque te da mas informacion;
> repr(values[0])
> Aca no sabes realmente qué contiene, sólo cómo se "ve" en pantalla.
>
> >
> >                 if values[0] != None: self.__name =
> > values[0].encode('utf8')
>
> encode es un metodo de los objetos unicode; recibe unicode y devuelve str
> en el encoding pedido.
> (en realidad nunca debió existir str.encode, solo str.decode y
> unicode.encode, pero sino se hubiera complicado mucho la compatibilidad)
> Todo va a andar bien si values[0] es unicode. O, si es una string pero
> ascii puro.
>
> > Valor: 'Ofimática'  - Tipo de value[0]:  <type 'unicode'>
> > Valor: 'Ofimática'  - Tipo de __name:  <type 'str'>
>
> Vamos bien; recibe unicode, genera str
>
> > Valor: 'Desarrollo'  - Tipo de value[0]:  <type 'str'>
> > Valor: 'Desarrollo'  - Tipo de __name:  <type 'str'>
>
> Aca tambien; recibe str (pero ascii); devuelve str.
>
> > Write the "Category Description": none
> > Valor: 'Categoría'  - Tipo de value[0]:  <type 'str'>
>
> Oops... Que es esta 'Categoría' como str? Deberia ser unicode
> Lo mejor seria fijarse de donde salio este valor, y arreglarlo para que
> sea unicode.
> En general, "el mundo exterior" habla bytes y strings, y eso es lo que se
> guarda en los archivos. "Adentro" del programa, conviene manejar unicode
> siempre. La conversion string->unicode conviene hacerla apenas leido el
> dato, y la conversion unicode->str conviene hacerla justo antes de grabar.
> La otra alternativa, bastante mas "chancha", es aceptar que te pueden
> aparecer indistintamente strings y unicode, y tratar de manejarlo:
>
>      if values[0] is not None:
>        if isinstance(values[0], unicode):
>          self.__name =  values[0].encode('utf8')
>        else:
>          self.__name =  values[0] # y aca confiamos en que realmente sea
> utf8
>          # o bien: self.__name = values[0].decode('utf8').encode('utf8')
>          # que, si es cierto que es un string en utf-8, deberia dar lo
> mismo...
>
> > 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.
>
> No estaras jugando con sys.setdefaultencoding, no? Seguro que
> sys.getdefaultencoding() te da utf-8?
>
> --
> Gabriel Genellina
>
>
> _______________________________________________
> Python-es mailing list
> Python-es en aditel.org
> http://listas.aditel.org/listinfo/python-es
>
>


-- 
____________________________________________
|
|    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