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