UnicodeDecodeError: 'utf8'codec can't decode byte 0xa5 in posizione 0: byte iniziale non valido
Sto usando script Python-2.6 CGI
ma ho trovato questo errore nel log del server mentre facevo json.dumps()
,
Traceback (most recent call last):
File "/etc/mongodb/server/cgi-bin/getstats.py", line 135, in <module>
print json.dumps(__getdata())
File "/usr/lib/python2.7/json/__init__.py", line 231, in dumps
return _default_encoder.encode(obj)
File "/usr/lib/python2.7/json/encoder.py", line 201, in encode
chunks = self.iterencode(o, _one_shot=True)
File "/usr/lib/python2.7/json/encoder.py", line 264, in iterencode
return _iterencode(o, 0)
UnicodeDecodeError: 'utf8' codec can't decode byte 0xa5 in position 0: invalid start byte
Qui ,
la funzione __getdata()
restituisce il dizionario {}
.
Prima di postare questa domanda ho fatto riferimento questo di domanda os SO.
AGGIORNAMENTI
La linea seguente fa male al codificatore JSON,
now = datetime.datetime.now()
now = datetime.datetime.strftime(now, '%Y-%m-%dT%H:%M:%S.%fZ')
print json.dumps({'current_time': now}) // this is the culprit
Ho una soluzione temporanea per questo
print json.dumps( {'old_time': now.encode('ISO-8859-1').strip() })
Ma non sono sicuro che sia il modo corretto di farlo.
132
3
L'errore è dovuto al fatto che c'è qualche carattere non-ascii nel dizionario e non può essere codificato/decodificato. Un modo semplice per evitare questo errore è quello di codificare tali stringhe con la funzione
encode()
come segue (sea
è la stringa con carattere non-ascii):Imposta l'encoder predefinito all'inizio del tuo codice
La linea seguente fa male al codificatore JSON,
Ho una soluzione temporanea per questo
Segnando questo come corretto come una correzione temporanea (Non sono sicuro così).