Ursachen und Abhilfemaßnahmen für UnicodeDecodeError [Python]

2019/6/5

Beim Versuch, einen Datensatz im CSV-Dateiformat mit Pandas zu lesen, trat sofort der Fehler "UnicodeDecodeError: 'utf-8'-Codec kann Byte 0x91 in Position 1: ungültiges Startbyte nicht dekodieren" auf. Machen Sie sich eine Notiz.

Fehlerinhalt

Lesen Sie die CSV-Datei mit pd.read_csv.Dann ...

Pandas importieren als pd df = pd.read_csv ('data.csv')

>> UnicodeDecodeError: Der Codec 'utf-8' kann das Byte 0x91 an Position 1 nicht dekodieren: Ungültiges Startbyte

Ich habe einen Unicode-Decodierungsfehler (Konvertieren eines Zeichencodes in ein Zeichen) erhalten.
Das Konvertieren von Zeichen in Zeichencodes wird übrigens als Codierung bezeichnet.

Grund

Innerhalb des PCs werden die Zeichen nicht so erkannt, wie sie sind, sondern als Zahlen (Zeichencodes) behandelt, die jedem Zeichen im Voraus zugewiesen wurden.

Es gibt viele Arten von Zeichencodes, abhängig von der Sprache und der Zuweisung von Zahlen. UTF-8 ist eine der Codierungsmethoden für Unicode, die als einheitlicher Standard des Weltstandards festgelegt wurden, sodass sie in jeder Sprache verwendet werden können.
UTF-8 scheint jedoch auch nicht perfekt zu sein (Wikipedia:Unicode-Probleme in der japanischen Umgebung)

Ich kenne das Zeichen nicht, das das Problem verursacht hat, aber da die CSV-Datei japanische Zeichen enthielt, verursachte die schlechte Konvertierung zwischen dem japanischen Zeichencode und UTF-8 den Unicode-Decodierungsfehler. Es scheint, dass dies der Fall war.

解決 策

Geben Sie beim Lesen mit read_csv () das Codierungsformat vom Argument bis zum japanischen Zeichencode (shift_jis usw.) an.

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

Ich konnte es erfolgreich lesen.

Anderes japanisch kompatibles Codierungsformat

Übrigens gibt es mehrere Zeichencodes, die Japanisch ausdrücken können, und Python implementiert standardmäßig Folgendes. (Referenz:Liste der Python-Standardcodierungen )

  • 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

Ich habe jedoch den Eindruck, dass es mit shift_jis oder cp932 gut gelesen werden kann, was eine wichtige Maßnahme ist.