2013-09-16 9 views
15

Ho problemi con i caratteri di codifica in utf-8. Sto usando Django e ottengo questo errore quando provo a inviare una notifica Android con testo non normale. Ho cercato di trovare la fonte dell'errore e sono riuscito a capire che la fonte dell'errore non è nel mio progetto.UnicodeDecodeError: il codec 'ascii' non può decodificare il byte 0xe7 in posizione 0: ordinale non compreso nell'intervallo (128)

con guscio pitone, tipo I:

'ç'.encode('utf8') 

e ottengo questo errore:

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe7 in position 0: ordinal not in range(128) 

ottengo gli stessi errori con:

'á'.encode('utf-8') 
unicode('ç') 
'ç'.encode('utf-8','ignore') 

ottengo errori con smart_text anche force_text e smart_bytes.

È un problema con Python, il mio sistema operativo o un'altra cosa?

Io corro Python 2.6.6 su una versione di Red Hat 4.4.7-3

risposta

20

Stai provando a codificare/decodificare le stringhe, non le stringhe Unicode. Le seguenti dichiarazioni funzionano:

u'ç'.encode('utf8') 
u'á'.encode('utf-8') 
unicode(u'ç') 
u'ç'.encode('utf-8','ignore') 
3

Usa u'...', senza il prefisso u è byte stringa non una stringa unicode .:

>>> u'ç'.encode('utf8') 
'\xc3\xa7'