Come convertire una stringa UTF-8 in Python
-
10-10-2019 - |
Domanda
Ho un browser, che invia i caratteri UTF-8 al mio assistente di Python, ma quando ho richiamarlo dalla stringa di query, la codifica che i rendimenti Python è ASCII. Come posso convertire la stringa pianura a utf-8?
Nota: La stringa passata dal web è già codifica UTF-8, voglio solo fare Python trattarla come UTF-8 non ASCII
.Soluzione
>>> plain_string = "Hi!"
>>> unicode_string = u"Hi!"
>>> type(plain_string), type(unicode_string)
(<type 'str'>, <type 'unicode'>)
^ Questa è la differenza tra una stringa di byte (plain_string) e una stringa unicode.
>>> s = "Hello!"
>>> u = unicode(s, "utf-8")
^ Conversione unicode e specificando la codifica.
Altri suggerimenti
Se i metodi di cui sopra non funzionano, si può anche dire Python di ignorare porzioni di una stringa che non può convertire in UTF-8:
stringnamehere.decode('utf-8', 'ignore')
Potrebbe essere un po 'eccessivo, ma quando lavoro con ASCII e Unicode in file stessi, ripetendo decodificare può essere un dolore, questo è quello che uso:
def make_unicode(input):
if type(input) != unicode:
input = input.decode('utf-8')
return input
else:
return input
L'aggiunta la seguente riga alla parte superiore del file .py:
# -*- coding: utf-8 -*-
permette di codificare le stringhe direttamente nello script, in questo modo:
utfstr = "ボールト"
Se ho capito bene, si dispone di una codifica byte-stringa UTF-8 nel codice.
Conversione di un byte-stringa in una stringa unicode è noto come decodifica (unicode -> byte-stringa è la codifica).
Lo fai che utilizzando il href="http://docs.python.org/library/functions.html#unicode" rel="noreferrer"> unicode funzione metodo "http://docs.python.org/library/stdtypes.html#str.decode" rel = "noreferrer">. O:
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')
In Python 3.6, non hanno un built-in modalità unicode (). Le stringhe sono già memorizzati come Unicode per impostazione predefinita e non è necessaria alcuna conversione. Esempio:
my_str = "\u221a25"
print(my_str)
>>> √25
Tradurre con ord () e UNICHAR (). Ogni unicode char hanno un numero asociated, qualcosa di simile a un indice. Così Python avere un paio di metodi per tradurre tra un carattere e il suo numero. Inconveniente è un esempio ñ. Spero che possa aiutare.
>>> C = 'ñ'
>>> U = C.decode('utf8')
>>> U
u'\xf1'
>>> ord(U)
241
>>> unichr(241)
u'\xf1'
>>> print unichr(241).encode('utf8')
ñ