2014-10-27 13 views
13

ho permanentemente ottenere il seguente errore:UnicodeEncodeError: codec 'ascii' non può codificare il carattere u ' XE4'

UnicodeEncodeError: 'ascii' codec can't encode character u'\xe4' in position 27: ordinal not in range(128) 

Ho già provato

  1. x.encode("ascii", "ignore")
  2. x.encode("utf-8")
  3. x.decode("utf-8")

Tuttavia, niente funziona.

+2

'u '\ xe4'.encode (' ascii ',' ignore ')' funziona bene per me. Abbiamo bisogno di più contesto per vedere quale sia il vero problema. –

+2

# 2 anche "funziona" in quanto produce un risultato senza errore; non posso dire se è il risultato desiderato. –

risposta

9

Devi scoprire in che codifica è questo carattere alla fonte.

Immagino che questo sia ISO-8859-1 (lingue europee), nel qual caso è "ä", ma dovresti controllare. Potrebbe anche essere cirillico o greco.

Vedere http://en.wikipedia.org/wiki/ISO/IEC_8859-1 per un elenco completo di caratteri in questa codifica.

Utilizzando queste informazioni, è possibile chiedere Python per convertirlo:

In Python 2,7

>>> s = '\xe4' 
>>> t = s.decode('iso-8859-1') 
>>> print t 
ä 
>>> for c in t: 
... print ord(c) 
... 
228 
>>> u = t.encode('utf-8') 
>>> print u 
ä 
>>> for c in bytes(u): 
... print ord(c) 
... 
195 
164 

String t è codificato internamente ISO-8859-1 in Python. La stringa u è codificata internamente in UTF-8 e quel carattere richiede 2 byte in UTF-8. Si noti inoltre che l'istruzione print "sa" come visualizzare queste diverse codifiche.

Problemi correlati