http://docs.python.org/howto/unicode.html#the-unicode-type
str = unicode(str, errors='replace')
nebo
str = unicode(str, errors='ignore')
Poznámka: Tímto odstraníte (ignorujete) příslušné znaky a vrátíte řetězec bez nich.
Pro mě je to ideální případ, protože jej používám jako ochranu před vstupem bez ASCII, který moje aplikace nepovoluje.
Alternativně: Použijte metodu open z codecs
modul ke čtení v souboru:
import codecs
with codecs.open(file_name, 'r', encoding='utf-8',
errors='ignore') as fdata:
Změna enginu z C na Python mi pomohla.
Motor je C:
pd.read_csv(gdp_path, sep='\t', engine='c')
Kodek „utf-8“ nemůže dekódovat bajt 0x92 na pozici 18:neplatný počáteční bajt
Engine je Python:
pd.read_csv(gdp_path, sep='\t', engine='python')
Žádné chyby.
Tento typ problému se mi objevuje nyní, když jsem přešel na Python 3. Netušil jsem, že Python 2 jednoduše válcuje nějaké problémy s kódováním souborů.
Našel jsem toto pěkné vysvětlení rozdílů a jak najít řešení poté, co pro mě nic z výše uvedeného nefungovalo.
http://python-notes.curiousefficiency.org/en/latest/python3/text_file_processing.html
Stručně řečeno, aby se Python 3 choval co nejpodobněji jako Python 2, použijte:
with open(filename, encoding="latin-1") as datafile:
# work on datafile here
Nicméně, přečtěte si článek, neexistuje žádné univerzální řešení.