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

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

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

 >>> plain_string = "Hi!" >>> unicode_string = u"Hi!" >>> type(plain_string), type(unicode_string) (, ) 

^ Esta 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 encoding.

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') 

Puede que sea un poco excesivo, pero cuando trabajo con ascii y unicode en los mismos archivos, repetir la deencoding puede ser una molestia, esto es lo que uso:

 def make_unicode(input): if type(input) != unicode: input = input.decode('utf-8') return input else: return input 

Si lo comprendo correctamente, tiene una cadena de bytes codificada en utf-8 en su código.

La conversión de una cadena de bytes a una cadena de Unicode se conoce como deencoding (Unicode -> la cadena de bytes es la encoding).

Lo haces usando la función Unicode o el método de deencoding . Ya sea:

 unicodestr = unicode(bytestr, encoding) unicodestr = unicode(bytestr, "utf-8") 

O:

 unicodestr = bytestr.decode(encoding) unicodestr = bytestr.decode("utf-8") 

Agregando la siguiente línea a la parte superior de su archivo .py:

 # -*- coding: utf-8 -*- 

te permite codificar cadenas directamente en tu script, como esto:

 utfstr = "ボールト" 
 city = 'Ribeir\xc3\xa3o Preto' print city.decode('cp1252').encode('utf-8') 

En Python 3.6, no tienen un método unicode () incorporado. Las cadenas ya están almacenadas como Unicode de forma predeterminada y no se requiere ninguna conversión. Ejemplo:

 my_str = "\u221a25" print(my_str) >>> √25 

Traducir con ord () y unichar (). Cada char de Unicode tiene un número asociado, algo así como un índice. Así que Python tiene algunos métodos para traducir entre un personaje y su número. El inconveniente es un ejemplo. Espero que pueda ayudar.

 >>> C = 'ñ' >>> U = C.decode('utf8') >>> U u'\xf1' >>> ord(U) 241 >>> unichr(241) u'\xf1' >>> print unichr(241).encode('utf8') ñ