/ / Warum bekommt Python3 einen UnicodeDecodeError, der eine Textdatei liest, während Python2 dies nicht tut? - Python, Python-3.x, Unicode

Warum erhält Python3 einen UnicodeDecodeError, der eine Textdatei liest, in der Python2 nicht ist? - Python, Python-3.x, Unicode

Ich lese in einer Textdatei. Ich habe es mit python2 gut gemacht, aber ich entschied mich, stattdessen meinen Code mit python3 auszuführen.

Mein Code zum Lesen der Textdatei lautet:

neg_words = []
with open("negative-words.txt", "r") as f:
for word in f:
neg_words.append(word)

Wenn ich diesen Code auf Python 3 ausführen, erhalte ich die folgende Fehlermeldung:

UnicodeDecodeError                        Traceback (most recent call last)
<ipython-input-14-1e2ff142b4c1> in <module>()
3 pos_words = []
4 with open("negative-words.txt", "r") as f:
----> 5     for word in f:
6         neg_words.append(word)
7 with open("positive-words.txt", "r") as f:

/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/codecs.py in
decode(self, input, final)
319         # decode input (taking the buffer into account)
320         data = self.buffer + input
--> 321         (result, consumed) = self._buffer_decode(data, self.errors, final)
322         # keep undecoded input until the next call
323         self.buffer = data[consumed:]

UnicodeDecodeError: "utf-8" codec can"t decode byte 0xef in position 3988: invalid continuation byte

Es scheint mir, dass es eine bestimmte Form von Text gibt, die python2 ohne Probleme dekodiert, was python3 nicht kann.

Könnte jemand bitte erklären, was der Unterschied zwischen Python2 und Python3 in Bezug auf diesen Fehler ist. Warum kommt es in einer Version vor, aber nicht in der anderen? Wie kann ich damit aufhören?

Antworten:

4 für die Antwort № 1

Ihre Datei ist nicht utf-8-codiert. Finden Sie heraus, welche Kodierung verwendet wird, und zwar speziell beim Öffnen der Datei:

with open("negative-words.txt", "r", encoding="<correct codec>") as f:

In Python 2 str ist ein binäre Zeichenfolge, die verschlüsselte Daten enthalten, nicht Unicode-Text. Wenn du verwenden würdest import io dann io.open()Sie würden die gleichen Probleme bekommen, oder wenn Sie versuchen würden, die Daten zu decodieren, mit denen Sie gelesen haben word.decode("utf8").

Sie möchten wahrscheinlich Unicode und Python kennenlernen. Ich empfehle Ned Batchelder´s dringend Pragmatischer Unicode.