Mengapa item di bawah ini gagal? dan mengapa itu berhasil dengan codec "latin-1"?
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")
menghasilkan:
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)
kesalahan dalam menggunakan.encode(latin-1)
Saya memiliki kesalahan yang sama ketika saya mencoba membuka file csv dengan metode read_csv panda.
Solusinya adalah mengubah encoding ke 'latin-1':
sumber
Itu tidak valid UTF-8. Karakter itu adalah karakter e-akut dalam ISO-Latin1, itulah sebabnya ia berhasil dengan kode itu.
Jika Anda tidak tahu set kode tempat Anda menerima string, berarti Anda sedikit kesulitan. Akan lebih baik jika satu kode tunggal (mudah-mudahan UTF-8) akan dipilih untuk protokol / aplikasi Anda dan kemudian Anda hanya akan menolak yang tidak diterjemahkan.
Jika Anda tidak bisa melakukan itu, Anda perlu heuristik.
sumber
Karena UTF-8 adalah multibyte dan tidak ada karakter yang sesuai dengan kombinasi Anda
\xe9
ditambah ruang berikut.Mengapa harus berhasil dalam kedua utf-8 dan latin-1?
Di sini bagaimana kalimat yang sama harus di utf-8:
sumber
Jika kesalahan ini muncul saat memanipulasi file yang baru saja dibuka, periksa untuk melihat apakah Anda membukanya dalam
'rb'
modesumber
soup = BeautifulSoup(open('webpage.html', 'rb'), 'html.parser')
Ini juga terjadi pada saya, ketika saya sedang membaca teks yang mengandung bahasa Ibrani dari sebuah
.txt
file.Saya mengklik:
file -> save as
dan saya menyimpan file ini sebagaiUTF-8
penyandiansumber
kode utf-8 biasanya muncul ketika kisaran nilai numerik melebihi 0 hingga 127.
alasan untuk mengajukan pengecualian ini adalah:
1) Jika titik kode <128, setiap byte sama dengan nilai titik kode. 2) Jika titik kode 128 atau lebih besar, string Unicode tidak dapat direpresentasikan dalam pengkodean ini. (Python memunculkan pengecualian UnicodeEncodeError dalam kasus ini.)
Untuk mengatasi ini kami memiliki satu set pengkodean, yang paling banyak digunakan adalah "Latin-1, juga dikenal sebagai ISO-8859-1"
Jadi ISO-8859-1 Unicode poin 0-255 identik dengan nilai Latin-1, jadi konversi ke pengkodean ini hanya memerlukan konversi titik kode ke nilai byte; jika titik kode lebih besar dari 255 ditemui, string tidak dapat dikodekan ke dalam Latin-1
ketika pengecualian ini terjadi ketika Anda mencoba memuat kumpulan data, coba gunakan format ini
Tambahkan teknik pengkodean di akhir sintaks yang kemudian menerima untuk memuat kumpulan data.
sumber
Gunakan ini, Jika itu menunjukkan kesalahan UTF-8
sumber
Dalam hal ini, saya mencoba menjalankan .py yang mengaktifkan path / file.sql.
Solusi saya adalah memodifikasi kodifikasi file.sql menjadi "UTF-8 tanpa BOM" dan berhasil!
Anda dapat melakukannya dengan Notepad ++.
saya akan meninggalkan bagian dari kode saya.
/ Kode /
con = psycopg2.connect (host = sys.argv [1], port = sys.argv [2], dbname = sys.argv [3], pengguna = sys.argv [4], kata sandi = sys.argv [5] )
cursor = con.cursor () sqlfile = open (path, 'r')
sumber