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

.
È stato utile?

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