Tengo una cadena en formato UTF-8 pero no estoy tan seguro de cómo convertir esta cadena a su literal de carácter correspondiente. Por ejemplo tengo la cadena:
Mi cadena es: 'Entre\xc3\xa9'
Ejemplo uno:
Este código:
u'Entre\xc3\xa9'.encode('latin-1').decode('utf-8')
devuelve el resultado: u'Entre\xe9'
Si luego continúo imprimiendo esto:
print u'Entre\xe9'
Me sale el resultado: Entreé
Esto es genial y está cerca de lo que necesito. El problema es que no puedo hacer de ‘Entre \ xc3 \ xa9’ una variable y pasarla a través de los pasos ya que esto se rompe. ¿Algún consejo para que esto funcione?
Ejemplo:
a = 'Entre\xc3\xa9' b = 'u'+ a.encode('latin-1').decode('utf-8') c= 'u'+ b
Me gustaría que el resultado de “c” fuera:
Entreé
La syntax de u''
solo funciona para literales de cadena , por ejemplo, la definición de valores en el código fuente. El uso de la syntax hace que se cree un objeto unicode
, pero esa no es la única forma de crear dicho objeto.
No puede crear un valor unicode
partir de una cadena de bytes agregando u
delante de ella. Pero si llamó a str.decode()
con la encoding correcta, obtendrá un valor unicode
. A la inversa, puede codificar objetos unicode
a cadenas de bytes con unicode.encode()
.
Tenga en cuenta que al mostrar un objeto unicode
, Python lo representa utilizando la syntax literal de la cadena Unicode nuevamente (por lo que u'...'
), para facilitar la depuración. Puede volver a pegar la representación en un intérprete de Python y obtener un objeto con el mismo valor.
Su valor a se define utilizando un literal de cadena de bytes, por lo que solo necesita descodificar:
a = 'Entre\xc3\xa9' b = a.decode('utf8')
Su primer ejemplo creó un Mojibake , una cadena Unicode que contiene puntos de código Latin-1 que en realidad representan UTF-8 bytes. Esta es la razón por la que primero tuvo que codificar a Latin-1 (para deshacer el Mojibake), luego decodificar desde UTF-8.
Es posible que desee leer sobre Python y Unicode en el CÓMO de Unicode . Otros artículos de interés son:
El Absoluto Mínimo que todos los desarrolladores de software absolutamente, positivamente deben saber sobre Unicode y conjuntos de caracteres (¡sin excusas!) Por Joel Spolsky
Unicode pragmático de Ned Batchelder