Lebih
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
216
7
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 bentuk10xx xxxx
. Jadi, misalnya: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:
(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.)
Saya memiliki kesalahan yang sama ketika saya mencoba untuk membuka file csv oleh panda read_csv metode.
Solusinya adalah mengubah pengkodean untuk 'latin-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.
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:
Jika kesalahan ini muncul ketika memanipulasi file yang baru dibuka, periksa untuk melihat jika anda membukanya di
'rb'
modeHal 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 sebagaiUTF-8
encodingDalam 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')