python google-app-engine unicode

python - Quitándote en la lista



google-app-engine unicode (6)

El u significa que las cadenas son unicode. Traduzca todas las cadenas a ascii para deshacerse de él:

a.encode(''ascii'', ''ignore'')

He leído sobre eliminar el carácter ''u'' en una lista, pero estoy usando el motor de la aplicación de google y parece que no funciona.

def get(self): players = db.GqlQuery("SELECT * FROM Player") print players playerInfo = {} test = [] for player in players: email = player.email gem = str(player.gem) a = "{email:"+email + ",gem:" +gem +"}" test.append(a) ast.literal_eval(json.dumps(test)) print test

Salida final:

[u''{email:[email protected],gem:0}'', u''{email:test,gem:0}'', u''{email:test,gem:0}'', u''{email:test,gem:0}'', u''{email:test,gem:0}'', u''{email:test1,gem:0}'']


Esa ''u'' es parte de la representación externa de la cadena, lo que significa que es una cadena Unicode en oposición a una cadena de bytes. No está en la cuerda, es parte del tipo.

Como ejemplo, puede crear un nuevo literal de cadena Unicode usando el mismo synax. Por ejemplo:

>>> sandwich = u"smörgås" >>> sandwich u''sm/xf6rg/xe5s''

Esto crea una nueva cadena Unicode cuyo valor es la palabra sueca para sándwich. Puede ver que los caracteres que no están en inglés están representados por sus puntos de código Unicode, ö es /xf6 y å es /xe5 . El prefijo ''u'' aparece como en su ejemplo para indicar que esta cadena contiene texto Unicode.

Para deshacerse de ellos, debe codificar la cadena Unicode en alguna representación orientada a bytes, como UTF-8. Puedes hacer eso con, por ejemplo:

>>> sandwich.encode("utf-8") ''sm/xc3/xb6rg/xc3/xa5s''

Aquí, obtenemos una nueva cadena sin el prefijo ''u'', ya que esta es una cadena de bytes. Contiene los bytes que representan los caracteres de la cadena Unicode, con los caracteres suecos que dan como resultado bytes múltiples debido a las maravillas de la codificación UTF-8.


No "elimina el carácter ''u'' de una lista", codifica cadenas Unicode. De hecho, las cuerdas que tienes están perfectamente bien para la mayoría de los usos; solo necesitará codificarlos adecuadamente antes de enviarlos.


u''AB'' es solo una representación de texto de la cadena Unicode correspondiente. Aquí hay varios métodos que crean exactamente la misma cadena Unicode:

L = [u''AB'', u''/x41/x42'', u''/u0041/u0042'', unichr(65) + unichr(66)] print u", ".join(L)

Salida

AB, AB, AB, AB

No hay un u'''' en la memoria . Es solo la forma de representar el objeto unicode en Python 2 (cómo se escribiría el literal de cadena Unicode en un código fuente de Python). Por defecto, print L es equivalente a print "[%s]" % ", ".join(map(repr, L)) es decir, se llama a la función repr() para cada elemento de la lista:

print L print "[%s]" % ", ".join(map(repr, L))

Salida

[u''AB'', u''AB'', u''AB'', u''AB''] [u''AB'', u''AB'', u''AB'', u''AB'']

Si está trabajando en un REPL, se utiliza un sys.displayhook personalizable que llama a repr() en cada objeto de forma predeterminada:

>>> L = [u''AB'', u''/x41/x42'', u''/u0041/u0042'', unichr(65) + unichr(66)] >>> L [u''AB'', u''AB'', u''AB'', u''AB''] >>> ", ".join(L) u''AB, AB, AB, AB'' >>> print ", ".join(L) AB, AB, AB, AB

No codificar a bytes. Imprimir unicode directamente .

En su caso específico, crearía una lista de Python y usaría json.dumps() para serializarla en lugar de usar el formato de cadena para crear texto JSON:

#!/usr/bin/env python2 import json # ... test = [dict(email=player.email, gem=player.gem) for player in players] print test print json.dumps(test)

Salida

[{''email'': u''[email protected]'', ''gem'': 0}, {''email'': u''test'', ''gem'': 0}, {''email'': u''test'', ''gem'': 0}, {''email'': u''test'', ''gem'': 0}, {''email'': u''test'', ''gem'': 0}, {''email'': u''test1'', ''gem'': 0}] [{"email": "[email protected]", "gem": 0}, {"email": "test", "gem": 0}, {"email": "test", "gem": 0}, {"email": "test", "gem": 0}, {"email": "test", "gem": 0}, {"email": "test1", "gem": 0}]


[u''{email:[email protected],gem:0}'', u''{email:test,gem:0}'', u''{email:test,gem:0}'', u''{email:test,gem:0}'', u''{email:test,gem:0}'', u''{email:test1,gem:0}'']

''u'' denota caracteres unicode. Podemos eliminarlo fácilmente con la función de mapa en el elemento de lista final

map(str, test)

Otra forma es cuando lo anexa a la lista

test.append(str(a))


arr = [str(r) for r in arr]

Esto básicamente convierte todos tus elementos en una cadena. Por lo tanto, elimina la codificación. Por lo tanto, el u que representa la codificación se elimina Hará el trabajo de manera fácil y eficiente