http://docs.python.org/howto/unicode.html#the-unicode-type
str = unicode(str, errors='replace')
oder
str = unicode(str, errors='ignore')
Hinweis: Dies entfernt (ignoriert) die fraglichen Zeichen und gibt den String ohne sie zurück.
Für mich ist dies der ideale Fall, da ich es als Schutz gegen Nicht-ASCII-Eingabe verwende, die von meiner Anwendung nicht zugelassen wird.
Alternativ: Verwenden Sie die offene Methode aus dem codecs
Modul zum Einlesen der Datei:
import codecs
with codecs.open(file_name, 'r', encoding='utf-8',
errors='ignore') as fdata:
Die Umstellung der Engine von C auf Python hat bei mir ausgereicht.
Engine ist C:
pd.read_csv(gdp_path, sep='\t', engine='c')
'utf-8'-Codec kann Byte 0x92 an Position 18 nicht decodieren:ungültiges Startbyte
Engine ist Python:
pd.read_csv(gdp_path, sep='\t', engine='python')
Keine Fehler für mich.
Diese Art von Problem taucht jetzt für mich auf, nachdem ich auf Python 3 umgestiegen bin. Ich hatte keine Ahnung, dass Python 2 Probleme mit der Dateicodierung einfach überrollt.
Ich fand diese nette Erklärung der Unterschiede und wie man eine Lösung findet, nachdem keiner der oben genannten Punkte für mich funktioniert hat.
http://python-notes.curiousefficiency.org/en/latest/python3/text_file_processing.html
Kurz gesagt, damit sich Python 3 so ähnlich wie möglich zu Python 2 verhält, verwenden Sie:
with open(filename, encoding="latin-1") as datafile:
# work on datafile here
Lesen Sie jedoch den Artikel, es gibt keine Einheitslösung.