UnicodeDecodeError, invalid continuarea octet

De ce este cel mai jos element nu? și de ce nu ar reuși cu "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")

rezultate în:

 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
Soluția

În binar, 0xE9 se pare ca 1110 1001. Dacă ați citit despre UTF-8 pe Wikipedia, veți vedea că astfel de un octet trebuie să fie urmată de două de formă 10xx xxxx. Astfel, de exemplu:

>>> b'\xe9\x80\x80'.decode('utf-8')
u'\u9000'

Dar asta e doar cauze mecanice de excepție. În acest caz, aveți un șir de caractere care este aproape sigur codificat în limba latină 1. Puteți vedea cum UTF-8 și latină 1 arata diferit:

>>> u'\xe9'.encode('utf-8')
b'\xc3\xa9'
>>> u'\xe9'.encode('latin-1')
b'\xe9'

(Notă, am'm, folosind un amestec de Python 2 și 3 reprezentare aici. Intrarea este valabil în orice versiune de Python, dar interpretorul Python este puțin probabil să arate de fapt, atât unicode și siruri de caractere octet în acest fel.)

Comentarii (2)

Am avut aceeasi eroare când am încercat să deschid un fișier csv de panda read_csv metodă.

Soluția a fost de a schimba codare a 'latină-1':

pd.read_csv('ml-100k/u.item', sep='|', names=m_cols , encoding='latin-1')
Comentarii (1)

Este invalid UTF-8. Acest caracter este e-acută caracter în ISO-Latin1, care este motivul pentru care reușește cu care codeset.

Dacă tu nu't știu codeset te're primirea siruri de caractere în,'re într-un pic de necazuri. Cel mai bine ar fi dacă un singur codeset (sperăm UTF-8) s-ar fi ales pentru protocol/aplicație și apoi'd respinge doar cei care nu't decoda.

Dacă poți't face asta, ai'll nevoie de euristici.

Comentarii (1)

Pentru UTF-8 este multibyte și nu există nici un char corespunde combinația de \xe9 plus următoarele spațiu.

De ce ar trebui să reușească în ambele utf-8 și latin-1?

Aici cum aceeași propoziție ar trebui să fie în utf-8:

>>> o.decode('latin-1').encode("utf-8")
'a test of \xc3\xa9 char'
Comentarii (1)

Dacă această eroare apare atunci când manipularea unui fișier care a fost deschis, verificați pentru a vedea dacă ați deschis-o în &#39;rb&#39; modul de

Comentarii (0)

Acest lucru mi s-a întâmplat, de asemenea, în timp ce citeam textul conține ebraică dintr-o `.txt file.

Am dat click: file -> salvare ca` si am salvat acest fisier ca "UTF-8" codare

Comentarii (0)

În acest caz, am încercat să execute un .py care activ o cale/fișier.sql.

Soluția mea a fost să modifice codificarea fișierului.sql pentru a "UTF-8 fără BOM" și funcționează!

Poti sa o faci cu Notepad++.

voi lăsa o parte din codul meu.

/Cod/

con=psycopg2.connect(host = sys.argv[1], port = sys.argv[2],dbname = sys.argv[3],utilizator = sys.argv[4], parola = sys.argv[5])

cursorul = con.cursor() sqlfile = open(cale, 'r')

Comentarii (0)