2011-07-25 10 views
55

utilicé esta:Cómo hacer cadena Unicode con python3

u = unicode(text, 'utf-8') 

Pero conseguir el error con Python 3 (o tal vez ... Me olvidé de incluir algo):

NameError: global name 'unicode' is not defined 

Gracias .

+14

Si hay una razón increíble para actualizar a python 3, es unicode por defecto. – JBernardo

Respuesta

77

Las cadenas literales son Unicode de manera predeterminada en python3

Suponiendo que el texto es un objeto bytes, sólo tiene que utilizar text.decode('utf-8')

unicode de python2 es equivalente a str en python3, por lo que también se puede escribir

str(text, 'utf-8') 

si usted prefiere

+14

TypeError: no se puede decodificar str – Gank

+4

@Gank, en Python3 un 'str' es unicode, es decir. está "decodificado" por lo que no tiene sentido llamar 'decode' en él –

+0

Same TypeError. Por favor simplemente reemplace con str (txt), o el código de @magicrebirth debajo de – Simon

5

What's new in Python 3.0 dice:

All text is Unicode; however encoded Unicode is represented as binary data

Si desea asegurarse de que está dando salida UTF-8, que aquí es un ejemplo de esta página en unicode in 3.0:

b'\x80abc'.decode("utf-8", "strict") 
+1

esto es exactamente lo que necesitamos para '\ x80abc'.decode ("utf-8", "strict") en Python 2, gracias – hylepo

8

Como solución, He estado usando esto:

# Fix Python 2.x. 
try: 
    UNICODE_EXISTS = bool(type(unicode)) 
except NameError: 
    unicode = lambda s: str(s) 
+4

¿Por qué estás usando una función lambda? Estos métodos se llaman de la misma manera en cualquier caso. Esta es una variación más simple: 'try: unicode = str; excepto: pase'. –

Cuestiones relacionadas