Suprimir el prefijo u’prefix que indica unicode ‘en cadenas de python

¿Hay alguna manera de suprimir globalmente el indicador de cadena Unicode en Python? Estoy trabajando exclusivamente con Unicode en una aplicación y hago muchas cosas interactivas. Tener el ‘prefijo’ aparece en todos mis resultados de depuración es innecesario y desagradable. ¿Puede ser apagado?

Podría usar Python 3.0 .. El tipo de cadena predeterminado es Unicode, por lo que el prefijo u'' ya no es necesario.

En resumen, no. No puedes apagar esto.

La u proviene del método unicode.__repr__ , que se usa para mostrar cosas en REPL:

 >>> print repr(unicode('a')) u'a' >>> unicode('a') u'a' 

Si no me equivoco, no puedes anular esto sin volver a comstackr Python.

La forma más sencilla de solucionar esto es simplemente imprimir la cadena ..

 >>> print unicode('a') a 

Si usa unicode() incorporado para construir todas sus cadenas, podría hacer algo como …

 >>> class unicode(unicode): ... def __repr__(self): ... return __builtins__.unicode.__repr__(self).lstrip("u") ... >>> unicode('a') a 

..pero no hagas eso, es horrible

Tuve un caso en el que necesitaba eliminar el prefijo u porque estaba configurando algunos javascript con python como parte de una plantilla html. Una salida simple dejó el prefijo u en las claves de dictado, por ejemplo

 var turns = [{u'armies':2...]; 

que rompe javascript.

Para obtener el javascript de salida necesario, usé el módulo json python para codificar la cadena para mí:

 turns = json.dumps(turns) 

Esto funciona en mi caso particular y como las claves son todas ascii, no hay que preocuparse por la encoding. Probablemente podrías usar este truco para tu salida de depuración.

 from __future__ import unicode_literals 

está disponible desde Python 2.6 (lanzado el 1 de octubre de 2008). Es predeterminado en Python 3.

Permite omitir u'' prefijo u'' en el código fuente, aunque no cambia repr(unicode_string) que podría ser engañoso.

Podría anular sys.displayhook() en un REPL de Python, para mostrar los objetos a su gusto. También puede anular __repr__ para sus propios objetos personalizados.

usar str( text ) es una idea un tanto mala, de hecho, cuando no puede estar 100% seguro de la encoding predeterminada de su Python y del contenido exacto de la cadena, este último sería típico de un texto obtenido de Internet. También, dependiendo de lo que quiera hacer, usar print text.encode( 'utf-8' ) o print repr( text.encode( 'utf-8' ) ) puede producir resultados decepcionantes, ya que puede obtener una representación completa de puntos de código ilegibles como \x3a .

Creo que lo óptimo es realmente aprovechar una línea de comando compatible con Unicode (difícil en Windows, fácil en Linux) y cambiar de Python 2.x a Python 3.x. La facilidad y claridad del manejo del texto frente a los bytes que ofrece la nueva serie python 3 es realmente una de las grandes ganancias que puede esperar. Significa que tendrá que pasar un poco de tiempo aprendiendo la distinción entre ‘bytes’ y ‘texto’ y comprender el concepto de encoding de caracteres, pero entonces ese tiempo se pasa mucho mejor en un entorno python 3 como nuevo enfoque de python para estos Los problemas molestos son mucho más claros y menos propensos a los errores de lo que Python 2 tenía para ofrecer. Iría tan lejos como para considerar retrospectivo el enfoque de Python 2 a Unicode como problemático, aunque solía pensar que era superior, cuando lo comparaba con la forma en que se maneja este problema en PHP .

edit, me detuve en una discusión relacionada aquí en SO y encontré este comentario sobre la forma en que php en estos días parece abordar problemas de encoding / Unicode:

Es como un ratón tratando de comerse un elefante. Al encuadrar Unicode como una extensión de ASCII (tenemos cadenas normales y mb_strings) hace que las cosas salgan mal y se cuelga de los casos especiales que se requieren para tratar personajes con garabatos graciosos que necesitan más de un byte. Si trata a Unicode como un espacio abstracto para cualquier carácter que necesite, ASCII se adapta a eso sin necesidad de tratarlo como un caso especial.

Cito esto aquí porque, según mi experiencia, el 90% de todos los temas SO python + unicode parecen provenir de personas que solían estar bien con ascii o tal vez latin-1, fueron mordidos por el carácter ocasional que no era compatible con su configuración habitual, Y luego, básicamente, sólo quiero deshacerse de él. lo que haces cuando cambias a python 3 es exactamente lo que sugiere el comentarista anterior: en lugar de ver Unicode como una extensión molesta de ascii, comienzas a ver ascii (y casi cualquier otra encoding que puedas encontrar) como subconjunto (s) ) de unicode.

para ser verdad, Unicode v6 no es la última palabra en codificaciones, pero es lo más cercano a ser universal que puedes obtener en 2011. Acostúmbrate a ello.

Sé que esta no es una opción global, pero también puede suprimir el Unicode u colocando la cadena en una función str ().

Así que una lista derivada de Unicode que se vería así:

 >>> myList=[unicode('a'),unicode('b'),unicode('c')] >>> myList [u'a', u'b', u'c'] 

se convertiría en esto:

 >>> myList=[str(unicode('a')),str(unicode('b')),str(unicode('c'))] >>> myList ['a', 'b', 'c'] 

Es un poco engorroso, pero podría ser útil para alguien

En caso de que esté obteniendo algo como esto, u['hello'] , debe estar imprimiendo una matriz. imprima str(arr[0]) y listo.

No estoy seguro con Unicode, pero generalmente puedes llamar a str.encode() para convertirlo en una forma más adecuada. Por ejemplo, la salida de subproceso capturada en Python 3.0+ lo captura como un flujo de bytes (prefijo ‘b’), y encode () se corrige a una forma de cadena regular.

Lo que parece estar funcionando para mí:

 import ast import json j = json.loads('{"one" : "two"}') j dd = {u'one': u'two'} dd # to get double quotes json.dumps(j, encoding='ascii') json.dumps(dd, encoding='ascii') # to get single quotes str(ast.literal_eval(json.dumps(j, encoding='ascii'))) str(ast.literal_eval(json.dumps(dd, encoding='ascii'))) 

Salida:

 >>> {u'one': u'two'} >>> {u'one': u'two'} >>> '{"one": "two"}' >>> '{"one": "two"}' >>> "{'one': 'two'}" >>> "{'one': 'two'}" 

Trabajos anteriores para los diccionarios y objetos JSON, como es evidente.

Para solo una cadena, envolver en str () parece funcionar para mí.

 s=u'test string' s str(s) 

Salida:

 >>> u'test string' >>> 'test string' 

Versión de Python: 2.7.12

Intenta lo siguiente

imprimir str (result.url)

Podría ser que su encoding predeterminada haya sido cambiada.

Puedes verificar tu encoding predeterminada con lo siguiente:

 > import sys > print sys.getdefaultencoding() > ascii 

El valor predeterminado debería ser ascii, lo que significa que u’string ‘debería imprimirse como’ cadena ‘, pero la suya puede haber sido modificada.

Tienes que usar print str(your_Variable)

En el caso de que no desee actualizar a Python 3, podría hacer uso de subcadenas. Por ejemplo, digamos que la salida original fue (u’mystring ‘,). Supongamos, por el bien del ejemplo, que la fila variable contiene la cadena “mystring” sin el prefijo Unicode. Entonces querrías hacer algo como esto:

 temp = str(row); #str is not necessary, but probably good practice temp = temp[:-3]; print = temp[3:];