http://docs.python.org/howto/unicode.html#the-unicode-type
str = unicode(str, errors='replace')
o
str = unicode(str, errors='ignore')
Nota: Questo eliminerà (ignorerà) i caratteri in questione restituendo la stringa senza di essi.
Per me questo è il caso ideale poiché lo sto usando come protezione contro l'input non ASCII che non è consentito dalla mia applicazione.
In alternativa: Usa il metodo aperto dal codecs
modulo da leggere nel file:
import codecs
with codecs.open(file_name, 'r', encoding='utf-8',
errors='ignore') as fdata:
Cambiare il motore da C a Python ha funzionato per me.
Il motore è C:
pd.read_csv(gdp_path, sep='\t', engine='c')
Il codec 'utf-8' non può decodificare il byte 0x92 in posizione 18:byte iniziale non valido
Il motore è Python:
pd.read_csv(gdp_path, sep='\t', engine='python')
Nessun errore per me.
Questo tipo di problema si presenta per me ora che sono passato a Python 3. Non avevo idea che Python 2 stesse semplicemente risolvendo a vapore qualsiasi problema con la codifica dei file.
Ho trovato questa bella spiegazione delle differenze e di come trovare una soluzione dopo che nessuno dei precedenti ha funzionato per me.
http://python-notes.curiousefficiency.org/en/latest/python3/text_file_processing.html
In breve, per fare in modo che Python 3 si comporti il più possibile simile a Python 2 usa:
with open(filename, encoding="latin-1") as datafile:
# work on datafile here
Tuttavia, leggi l'articolo, non esiste una soluzione adatta a tutte le dimensioni.