Cómo convertir una cadena en UTF-8 en Python
-
10-10-2019 - |
Pregunta
Tengo un navegador que envía caracteres UTF-8 para mi servidor de Python, pero cuando la recupere de la cadena de consulta, la codificación que vuelve Python es ASCII. ¿Cómo puedo convertir la cadena normal a UTF-8?
NOTA: La cadena que se pasa desde la web ya está codificación UTF-8, que sólo quieren hacer Python para tratarla como UTF-8 no ASCII
.Solución
>>> plain_string = "Hi!"
>>> unicode_string = u"Hi!"
>>> type(plain_string), type(unicode_string)
(<type 'str'>, <type 'unicode'>)
^ Esta es la diferencia entre una cadena de bytes (plain_string) y una cadena Unicode.
>>> s = "Hello!"
>>> u = unicode(s, "utf-8")
^ conversión a Unicode y especificando la codificación.
Otros consejos
Si los métodos anteriores no funcionan, también puede decirle a Python para ignorar partes de una cadena que no puede convertir a UTF-8:
stringnamehere.decode('utf-8', 'ignore')
Puede que sea un poco exagerado, pero cuando trabajo con ASCII y Unicode en archivos mismos, repitiendo decodificación puede ser un dolor, esto es lo que yo uso:
def make_unicode(input):
if type(input) != unicode:
input = input.decode('utf-8')
return input
else:
return input
añadiendo la siguiente línea a la parte superior de su archivo .py:
# -*- coding: utf-8 -*-
le permite codificar cadenas directamente en el script, como esto:
utfstr = "ボールト"
Si he entendido bien, usted tiene una codificada byte cadena UTF-8 en el código.
Conversión de un byte-cadena a una cadena Unicode se conoce como la decodificación (Unicode -> byte-string está codificando).
Usted lo hace mediante el uso de la href="http://docs.python.org/library/functions.html#unicode" rel="noreferrer"> Unicode función o la método "http://docs.python.org/library/stdtypes.html#str.decode" rel = "noreferrer">. O bien:
unicodestr = unicode(bytestr, encoding)
unicodestr = unicode(bytestr, "utf-8")
O:
unicodestr = bytestr.decode(encoding)
unicodestr = bytestr.decode("utf-8")
city = 'Ribeir\xc3\xa3o Preto'
print city.decode('cp1252').encode('utf-8')
En Python 3.6, que no tienen un método integrado Unicode (). Cuerdas ya están almacenados como Unicode de manera predeterminada y no se requiere ninguna conversión. Ejemplo:
my_str = "\u221a25"
print(my_str)
>>> √25
Traducir con ord () y unichar (). Cada carbón Unicode tiene un número ASOCIADOS, algo así como un índice. Así Python tener un número de métodos para traducir entre un char y su número. Lo malo 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')
ñ