Causes et remèdes pour UnicodeDecodeError [Python]

2019er mars 6

Lorsque j'ai essayé de lire un ensemble de données au format de fichier csv avec des pandas, j'ai immédiatement rencontré l'erreur "UnicodeDecodeError: le codec 'utf-8' ne peut pas décoder l'octet 0x91 en position 1: octet de démarrage invalide".

contenu de l'erreur

Lisez le fichier csv avec pd.read_csv.Puis ...

importer des pandas en tant que pd df = pd.read_csv ('data.csv')

>> UnicodeDecodeError: le codec 'utf-8' ne peut pas décoder l'octet 0x91 en position 1: octet de départ invalide

J'ai eu une erreur de décodage Unicode (conversion d'un code de caractère en caractère).
À propos, la conversion de caractères en codes de caractères s'appelle l'encodage.

Raison

À l'intérieur de l'ordinateur personnel, les caractères ne sont pas reconnus tels quels, mais sont traités comme des nombres (codes de caractères) affectés à chaque caractère à l'avance.

Il existe de nombreux types de codes de caractères en fonction de la langue et de la manière d'attribuer des numéros. UTF-8 est l'une des méthodes de codage pour Unicode définie comme une norme unifiée de la norme mondiale afin qu'elle puisse être utilisée dans n'importe quelle langue.
Cependant, UTF-8 ne semble pas non plus parfait (Wikipedia:Problèmes Unicode dans l'environnement japonais)

Je ne connais pas le caractère qui a causé le problème, mais comme le fichier csv contenait des caractères japonais, la mauvaise conversion entre le code de caractère japonais et UTF-8 a causé l'erreur de décodage Unicode.

解決 策

Lors de la lecture avec read_csv (), spécifiez le format d'encodage de l'argument au code de caractère japonais (shift_jis, etc.).

df = pd.read_csv ('data.csv', encoding = 'shift_jis')

J'ai pu le lire avec succès.

Autres formats d'encodages compatibles japonais

À propos, il existe plusieurs codes de caractères qui peuvent exprimer le japonais, et Python implémente ce qui suit en standard. (Référence:Liste des encodages standard Python )

  • cp932
  • euc_jp, euc_jis_2004, euc_jisx0213
  • iso2022_jp, iso2022_jp_1, iso2022_jp_2, iso2022_jp_3
  • iso2022_jp_2004, iso2022_jp_2ext
  • shift_jis, shift_jis _2004, shift_jisx0213

Cependant, il semble qu'il puisse être bien lu avec shift_jis ou cp932, ce qui est une mesure majeure.