Convertir “\xF0\x9D\x96\xA7\xF0\x9D” a una cadena “normal” en Python.
Hoy me topé con un problema en el cual un cliente nos enviaba un correo electrónico. Extraje el correo electrónico a través de la API de Zendesk y quería guardarlo en nuestra base de datos MySQL. Al empujar el correo electrónico me apareció el error “valor incorrecto de cadena” (‘\xF0\x9D\x96\xA7\xF0\x9D’), lo cual fue extraño ya que el contenido del correo electrónico era simplemente texto plano como “Hola – ¿dónde está mi paquete?” (en otro idioma). Después de un tiempo me di cuenta que todas las letras no parecían “letras ordinarias de cadena” y resultó que el “Hola” en el correo electrónico no era igual a “Hola” es decir email_body[:5]==”Hello” fue falso (¿quizás se usó una fuente extraña en el correo electrónico?). La codificación del cuerpo mostró que el cuerpo en realidad comenzaba con \xF0\x9D\x96\xA7\xF0\x9D y no “Hola”.
El problema, como se muestra arriba, es que “Hola” en el correo no es igual a “Hola” “ordinario”, por lo que no puedo comparar cadenas, manipular cadenas, etc.
¿Existe alguna forma de convertir el “Hola” que obtuve del cuerpo del correo electrónico a una cadena ordinaria, de modo que las dos cadenas “Hola” sean iguales nuevamente?
davy.ai
Sí, puedes convertir el “Hola” que recibiste del cuerpo del correo electrónico en una cadena normal utilizando los métodos
.encode()
y.decode()
. El método.encode()
convertirá la cadena en un objeto similar a bytes, y el método.decode()
convertirá el objeto similar a bytes de vuelta a una cadena. Por ejemplo, si tienes una cadenamy_string = "Hola"
, puedes usarmy_string.encode()
para convertirla en un objeto similar a bytes, y luego usarmy_string.decode()
para convertirlo de vuelta a una cadena. Esto asegurará que las dos cadenas “Hola” sean iguales nuevamente.