http://docs.python.org/howto/unicode.html#the-unicode-type
str = unicode(str, errors='replace')
ou
str = unicode(str, errors='ignore')
Remarque : Cela supprimera (ignorera) les caractères en question en renvoyant la chaîne sans eux.
Pour moi, c'est le cas idéal puisque je l'utilise comme protection contre les entrées non-ASCII, ce qui n'est pas autorisé par mon application.
Alternative : Utiliser la méthode open du codecs
module à lire dans le fichier :
import codecs
with codecs.open(file_name, 'r', encoding='utf-8',
errors='ignore') as fdata:
Changer le moteur de C en Python a fait l'affaire pour moi.
Le moteur est C :
pd.read_csv(gdp_path, sep='\t', engine='c')
Le codec 'utf-8' ne peut pas décoder l'octet 0x92 en position 18 :octet de début invalide
Le moteur est Python :
pd.read_csv(gdp_path, sep='\t', engine='python')
Aucune erreur pour moi.
Ce type de problème surgit pour moi maintenant que je suis passé à Python 3. Je n'avais aucune idée que Python 2 ne faisait que résoudre à la vapeur les problèmes d'encodage de fichiers.
J'ai trouvé cette belle explication des différences et comment trouver une solution après qu'aucune des solutions ci-dessus n'ait fonctionné pour moi.
http://python-notes.curiousefficiency.org/en/latest/python3/text_file_processing.html
En bref, pour que Python 3 se comporte de manière aussi similaire que possible à Python 2, utilisez :
with open(filename, encoding="latin-1") as datafile:
# work on datafile here
Cependant, lisez l'article, il n'y a pas de solution unique.