http://docs.python.org/howto/unicode.html#the-unicode-type
str = unicode(str, errors='replace')
o
str = unicode(str, errors='ignore')
Para mí, este es el caso ideal, ya que lo estoy usando como protección contra la entrada que no es ASCII, lo que no está permitido en mi aplicación.
Alternativamente: Usa el método abierto del codecs
módulo para leer en el archivo:
import codecs
with codecs.open(file_name, 'r', encoding='utf-8',
errors='ignore') as fdata:
Cambiar el motor de C a Python funcionó para mí.
El motor es C:
pd.read_csv(gdp_path, sep='\t', engine='c')
El códec 'utf-8' no puede decodificar el byte 0x92 en la posición 18:byte de inicio no válido
El motor es Python:
pd.read_csv(gdp_path, sep='\t', engine='python')
No hay errores para mí.
Este tipo de problema surge para mí ahora que me he mudado a Python 3. No tenía idea de que Python 2 simplemente estaba solucionando cualquier problema con la codificación de archivos.
Encontré esta buena explicación de las diferencias y cómo encontrar una solución después de que nada de lo anterior funcionó para mí.
http://python-notes.curiousefficiency.org/en/latest/python3/text_file_processing.html
En resumen, para hacer que Python 3 se comporte de la manera más similar posible a Python 2, use:
with open(filename, encoding="latin-1") as datafile:
# work on datafile here
Sin embargo, lea el artículo, no hay una solución única para todos.