Usé esto:
u = unicode(text, 'utf-8')
Pero obteniendo un error con Python 3 (o ... tal vez simplemente olvidé incluir algo):
NameError: global name 'unicode' is not defined
Gracias.
Usé esto:
u = unicode(text, 'utf-8')
Pero obteniendo un error con Python 3 (o ... tal vez simplemente olvidé incluir algo):
NameError: global name 'unicode' is not defined
Gracias.
Respuestas:
Las cadenas literales son Unicode por defecto en Python3.
Suponiendo que
text
es unbytes
objeto, solo usatext.decode('utf-8')
unicode
de Python2 es equivalente astr
en Python3, por lo que también puede escribir:si tu prefieres.
fuente
str
es unicode, es decir. se "decodifica", por lo que no tiene sentido para llamardecode
en élstr(text, 'utf-8')
, el texto debe ser una cadena binaria. por ejemplostr(b'this is a binary', 'utf-8')
Lo nuevo en Python 3.0 dice:
Si desea asegurarse de que está generando utf-8, aquí hay un ejemplo de esta página en unicode en 3.0 :
fuente
Como solución alternativa, he estado usando esto:
fuente
try: unicode = str; except: pass
.unicode = str
ya que no fallará ni en 2 ni en 3from six import u as unicode
lo que preferiría simplemente porque es más autodocumentado (ya que seis es una capa de compatibilidad de 2/3) queunicode = str
Así solucioné mi problema para convertir caracteres como \ uFE0F, \ u000A, etc. Y también emojis que codificaban con 16 bytes.
fuente
En un programa de Python 2 que usé durante muchos años había esta línea:
Esto no funcionó en Python 3.
Sin embargo, el programa resultó funcionar con:
No recuerdo por qué puse unicode allí en primer lugar, pero creo que fue porque el nombre puede contener letras suecas åäöÅÄÖ. Pero incluso ellos funcionan sin "unicode".
fuente
la forma más fácil en Python 3.x
fuente