Causes et remèdes pour UnicodeDecodeError [Python]
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.
discussion
Liste des commentaires
cp949 est coréen, n'est-ce pas?
Veuillez utiliser cp932.
引用
cp932 | 932, ms932, mskanji, ms-kanji | japonais
cp949 | 949, ms949, uhc | coréen
Merci pour votre conseil.Il semble que la colonne de référence ait été décrite à tort comme cp949.Je l'ai corrigé.
Hématome!résolu!
C'était utile