UnicodeDecodeError, tidak valid kelanjutan byte

Mengapa item di bawah ini gagal? dan mengapa tidak berhasil dengan "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")

hasil:

 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
Larutan

Dalam biner, 0xE9 terlihat seperti 1110 1001. Jika anda membaca tentang UTF-8 di Wikipedia, anda akan melihat bahwa seperti byte harus diikuti oleh dua bentuk 10xx xxxx. Jadi, misalnya:

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

Tapi itu hanya mekanik yang menyebabkan pengecualian. Dalam hal ini, anda memiliki string yang hampir pasti dikodekan dalam bahasa latin 1. Anda dapat melihat bagaimana UTF-8 dan latin 1 terlihat berbeda:

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

(Catatan, saya'm menggunakan campuran Python 2 dan 3 perwakilan di sini. Input ini berlaku di semua versi dari Python, tapi anda interpreter Python adalah tidak mungkin untuk benar-benar menunjukkan kedua unicode dan byte string dengan cara ini.)

Komentar (2)

Saya memiliki kesalahan yang sama ketika saya mencoba untuk membuka file csv oleh panda read_csv metode.

Solusinya adalah mengubah pengkodean untuk 'latin-1':

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

Hal ini tidak valid UTF-8. Karakter itu adalah e-akut karakter dalam ISO-Latin1, yang mengapa itu berhasil dengan gugus kode.

Jika anda don't tahu gugus kode anda're menerima string, anda're di sedikit kesulitan. Itu akan menjadi yang terbaik jika satu set kode (mudah-mudahan UTF-8) akan dipilih untuk anda protocol/aplikasi dan kemudian anda'd hanya menolak orang-orang yang tidak't decode.

Jika anda dapat't melakukan itu, anda'll perlu heuristik.

Komentar (1)

Karena UTF-8 adalah multibyte dan tidak ada char yang sesuai untuk anda kombinasi dari \xe9 plus berikut ruang.

Mengapa harus berhasil dalam kedua ** utf-8 dan latin-1?

Berikut ini bagaimana kalimat yang sama harus dalam utf-8:

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

Jika kesalahan ini muncul ketika memanipulasi file yang baru dibuka, periksa untuk melihat jika anda membukanya di &#39;rb&#39; mode

Komentar (0)

Hal ini terjadi pada saya juga, saat saya sedang membaca teks yang berisi ibrani dari .txt file.

Saya diklik: file -> save as dan saya simpan file ini sebagai UTF-8 encoding

Komentar (0)

Dalam hal ini, saya mencoba untuk menjalankan .py yang aktif path/file.sql.

Solusi saya adalah untuk memodifikasi kodifikasi file.sql untuk "UTF-8 tanpa BOM" dan itu bekerja!

Anda dapat melakukannya dengan Notepad++.

aku akan meninggalkan bagian dari kode saya.

/Kode/

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

kursor = con.kursor() sqlfile = open(path, 'r')

Komentar (0)