Warum schlägt der folgende Punkt fehl? und warum gelingt es mit "latin-1" codec?
o = "a test of \xe9 char" #I want this to remain a string as this is what I am receiving
v = o.decode("utf-8")
Ergebnisse in:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python27\lib\encodings\utf_8.py",
line 16, in decode
return codecs.utf_8_decode(input, errors, True) UnicodeDecodeError:
'utf8' codec can't decode byte 0xe9 in position 10: invalid continuation byte
UnicodeEncodeError: 'ascii' codec can't encode characters in position 2-3: ordinal not in range(128)
Fehler bei der Verwendung.encode(latin-1)
Ich hatte den gleichen Fehler, als ich versuchte, eine CSV-Datei mit der Methode pandas read_csv zu öffnen.
Die Lösung bestand darin, die Codierung in "Latin-1" zu ändern:
quelle
Es ist ungültig UTF-8. Dieses Zeichen ist das e-akute Zeichen in ISO-Latin1, weshalb es mit diesem Codesatz erfolgreich ist.
Wenn Sie den Codesatz, in dem Sie Zeichenfolgen erhalten, nicht kennen, haben Sie Probleme. Es ist am besten, wenn ein einzelner Codesatz (hoffentlich UTF-8) für Ihr Protokoll / Ihre Anwendung ausgewählt wird und Sie dann nur diejenigen ablehnen, die nicht dekodiert wurden.
Wenn Sie das nicht können, benötigen Sie Heuristiken.
quelle
Weil UTF-8 ein Multibyte ist und es kein Zeichen gibt, das Ihrer Kombination von entspricht
\xe9
Plus-Leerzeichen entspricht.Warum sollte es sowohl in utf-8 als auch in latein-1 gelingen ?
Hier, wie der gleiche Satz in utf-8 sein sollte:
quelle
Wenn dieser Fehler beim Bearbeiten einer gerade geöffneten Datei auftritt, überprüfen Sie, ob Sie sie im
'rb'
Modus geöffnet habenquelle
soup = BeautifulSoup(open('webpage.html', 'rb'), 'html.parser')
Dies passierte mir auch, als ich Text mit Hebräisch aus einer
.txt
Datei las .Ich habe geklickt:
file -> save as
und diese Datei alsUTF-8
Codierung gespeichertquelle
Der utf-8-Codefehler tritt normalerweise auf, wenn der Bereich der numerischen Werte 0 bis 127 überschreitet.
Der Grund für diese Ausnahme ist:
1) Wenn der Codepunkt <128 ist, entspricht jedes Byte dem Wert des Codepunkts. 2) Wenn der Codepunkt 128 oder höher ist, kann die Unicode-Zeichenfolge in dieser Codierung nicht dargestellt werden. (Python löst in diesem Fall eine UnicodeEncodeError-Ausnahme aus.)
Um dies zu überwinden, haben wir eine Reihe von Codierungen. Die am häufigsten verwendete ist "Latin-1, auch bekannt als ISO-8859-1".
ISO-8859-1-Unicode-Punkte 0–255 sind also mit den Latin-1-Werten identisch. Für die Konvertierung in diese Codierung müssen lediglich Codepunkte in Bytewerte konvertiert werden. Wenn ein Codepunkt größer als 255 gefunden wird, kann die Zeichenfolge nicht in Latin-1 codiert werden
Wenn diese Ausnahme auftritt, wenn Sie versuchen, einen Datensatz zu laden, versuchen Sie, dieses Format zu verwenden
Fügen Sie am Ende der Syntax eine Codierungstechnik hinzu, die dann das Laden des Datensatzes akzeptiert.
quelle
Verwenden Sie diese Option, wenn der Fehler von UTF-8 angezeigt wird
quelle
In diesem Fall habe ich versucht, eine .py-Datei auszuführen, die einen Pfad / eine Datei.sql aktiviert.
Meine Lösung bestand darin, die Codierung der Datei file.sql in "UTF-8 ohne Stückliste" zu ändern, und es funktioniert!
Sie können dies mit Notepad ++ tun.
Ich werde einen Teil meines Codes hinterlassen.
/ Code /
con = psycopg2.connect (host = sys.argv [1], port = sys.argv [2], dbname = sys.argv [3], user = sys.argv [4], password = sys.argv [5] )
cursor = con.cursor () sqlfile = open (Pfad, 'r')
quelle