UnicodeDecodeError: 'utf8' codec dapat't decode byte 0xa5 di posisi 0: tidak valid mulai byte
Saya menggunakan Python-2.6 CGI
script ini error di log server saat melakukan json.kesedihan()
,
Traceback (most recent call last):
File "/etc/mongodb/server/cgi-bin/getstats.py", line 135, in <module>
print json.dumps(__getdata())
File "/usr/lib/python2.7/json/__init__.py", line 231, in dumps
return _default_encoder.encode(obj)
File "/usr/lib/python2.7/json/encoder.py", line 201, in encode
chunks = self.iterencode(o, _one_shot=True)
File "/usr/lib/python2.7/json/encoder.py", line 264, in iterencode
return _iterencode(o, 0)
UnicodeDecodeError: 'utf8' codec can't decode byte 0xa5 in position 0: invalid start byte
Di sini ,
__getdata()
kembali fungsi kamus {}
.
Sebelum posting pertanyaan ini saya telah dirujuk ini pertanyaan os JADI.
UPDATE
Baris berikut adalah menyakiti JSON encoder,
now = datetime.datetime.now()
now = datetime.datetime.strftime(now, '%Y-%m-%dT%H:%M:%S.%fZ')
print json.dumps({'current_time': now}) // this is the culprit
Aku memperbaiki sementara untuk itu
print json.dumps( {'old_time': now.encode('ISO-8859-1').strip() })
Tapi saya tidak yakin apakah itu cara yang benar untuk melakukannya.
132
12
Coba kode di bawah ini cuplikan:
Kesalahan ini karena ada beberapa karakter non-ascii di kamus dan dapat't akan dikodekan/diterjemahkan. Salah satu cara sederhana untuk menghindari kesalahan ini adalah untuk mengkodekan string tersebut dengan
encode()
fungsi sebagai berikut (jikaa
adalah string dengan karakter non-ascii):Saya beralih ini hanya dengan mendefinisikan berbagai paket codec di
read_csv()
perintah:String anda memiliki non-ascii karakter dikodekan di dalamnya.
Tidak mampu untuk men-decode dengan utf-8 mungkin terjadi jika anda've diperlukan untuk menggunakan pengkodean lainnya dalam kode anda. Misalnya:
Dalam hal ini, encoding adalah windows-1252 jadi yang harus anda lakukan:
Sekarang bahwa anda memiliki unicode, anda dapat dengan aman encode ke utf-8.
Baca csv saya menambahkan sebuah metode pengkodean:
Set default encoder di atas kode
Terinspirasi oleh aaronpenne dan Soumyaansh
Sebagai 2018-05 ini ditangani langsung dengan
decode
, setidaknya untuk Python 3.I'm menggunakan berikut cuplikan setelah mendapatkan
tidak valid mulai byte
dantidak valid kelanjutan byte
jenis kesalahan. Menambahkankesalahan='mengabaikan'
tetap untuk saya.Baris berikut adalah menyakiti JSON encoder,
Aku memperbaiki sementara untuk itu
Menandai ini sebagai benar sebagai temporary fix (Tidak yakin).
Jika metode di atas tidak bekerja untuk anda, anda mungkin ingin melihat ke dalam mengubah encoding file csv itu sendiri.
Menggunakan Excel:
Menggunakan Notepad:
Dengan melakukan ini, anda harus mampu mengimpor file csv tanpa menghadapi UnicodeCodeError.
Setelah mencoba semua tersebut workarounds, jika masih melempar kesalahan yang sama, anda dapat mencoba mengekspor file CSV (untuk yang kedua kalinya jika anda sudah memiliki). Terutama jika anda're menggunakan scikit belajar, yang terbaik adalah untuk mengimpor data sebagai file CSV.
Aku menghabiskan berjam-jam bersama-sama, sedangkan larutan yang sederhana ini. Ekspor sebagai file CSV ke direktori di mana Anaconda atau anda classifier alat yang dipasang dan mencoba.
Anda dapat menggunakan standar pengkodean tertentu dan penggunaan input.
"utf-8" adalah default.
"iso8859-1" ini juga populer untuk Eropa Barat.
misalnya:
bytes_obj.decode('iso8859-1')
lihat: https://docs.python.org/3/library/codecs.html#standard-encodings