Cómo convertir una cadena a utf-8 en Python

Resuelto Bin Chen asked hace 13 años • 13 respuestas

Tengo un navegador que envía caracteres utf-8 a mi servidor Python, pero cuando lo recupero de la cadena de consulta, la codificación que devuelve Python es ASCII. ¿Cómo puedo convertir la cadena simple a utf-8?

NOTA: La cadena pasada desde la web ya está codificada en UTF-8, solo quiero que Python la trate como UTF-8, no como ASCII.

Bin Chen avatar Nov 15 '10 15:11 Bin Chen
Aceptado

En Python 2

>>> plain_string = "Hi!"
>>> unicode_string = u"Hi!"
>>> type(plain_string), type(unicode_string)
(<type 'str'>, <type 'unicode'>)

^ Ésta es la diferencia entre una cadena de bytes (plain_string) y una cadena Unicode.

>>> s = "Hello!"
>>> u = unicode(s, "utf-8")

^ Convertir a Unicode y especificar la codificación.

En Python 3

Todas las cadenas son Unicode. La unicodefunción ya no existe. Ver respuesta de @Noumenon

user225312 avatar Nov 15 '2010 08:11 user225312

Si los métodos anteriores no funcionan, también puedes decirle a Python que ignore partes de una cadena que no puede convertir a utf-8:

stringnamehere.decode('utf-8', 'ignore')
duhaime avatar Oct 07 '2013 17:10 duhaime

Puede que sea un poco excesivo, pero cuando trabajo con ascii y unicode en los mismos archivos, repetir la decodificación puede ser complicado, esto es lo que uso:

def make_unicode(inp):
    if type(inp) != unicode:
        inp =  inp.decode('utf-8')
    return inp
Blueswannabe avatar Nov 29 '2014 19:11 Blueswannabe