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(​​__get​data())
  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.

Mengomentari pertanyaan (7)

Coba kode di bawah ini cuplikan:

with open(path, 'rb') as f:
  text = f.read()
Komentar (1)
Larutan

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 (jika a adalah string dengan karakter non-ascii):

a.encode('utf-8').strip()
Komentar (2)

Saya beralih ini hanya dengan mendefinisikan berbagai paket codec di read_csv() perintah:

encoding = 'unicode_escape'
Komentar (0)

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:

>>> 'my weird character \x96'.decode('utf-8')
Traceback (most recent call last):
  File "", line 1, in 
  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 0x96 in position 19: invalid start byte

Dalam hal ini, encoding adalah windows-1252 jadi yang harus anda lakukan:

>>> 'my weird character \x96'.decode('windows-1252')
u'my weird character \u2013'

Sekarang bahwa anda memiliki unicode, anda dapat dengan aman encode ke utf-8.

Komentar (0)

Baca csv saya menambahkan sebuah metode pengkodean:

import pandas as pd
dataset = pd.read_csv('sample_data.csv',header=0,encoding = 'unicode_escape')
Komentar (0)

Set default encoder di atas kode

import sys
reload(sys)
sys.setdefaultencoding("ISO-8859-1")
Komentar (0)

Terinspirasi oleh aaronpenne dan Soumyaansh

f    = open("file.txt","rb")
text = f.read().decode(errors='replace')
Komentar (2)

Sebagai 2018-05 ini ditangani langsung dengan decode, setidaknya untuk Python 3.

I'm menggunakan berikut cuplikan setelah mendapatkan tidak valid mulai byte dan tidak valid kelanjutan byte jenis kesalahan. Menambahkan kesalahan=&#39;mengabaikan&#39; tetap untuk saya.

with open(out_file, 'rb') as f:
    for line in f:
        print(line.decode(errors='ignore'))
Komentar (0)

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() })

Menandai ini sebagai benar sebagai temporary fix (Tidak yakin).

Komentar (0)

Jika metode di atas tidak bekerja untuk anda, anda mungkin ingin melihat ke dalam mengubah encoding file csv itu sendiri.

Menggunakan Excel:

  1. Buka file csv menggunakan Excel
  2. Menavigasi ke "File menu" opsi dan klik "Simpan Sebagai"
  3. Klik "Isi" pilih lokasi untuk menyimpan file
  4. Masukkan dimaksudkan filename
  5. Pilih CSV (Comma delimited) (*.csv) pilihan
  6. Klik "Alat" kotak drop-down dan klik "Web Pilihan"
  7. Di bawah "Encoding" tab, pilih opsi Unicode (UTF-8) dari "Simpan dokumen ini sebagai" daftar drop-down
  8. Simpan file

Menggunakan Notepad:

  1. Buka file csv menggunakan notepad
  2. Menavigasi ke "File" > "Simpan Sebagai" pilihan
  3. Berikutnya, pilih lokasi untuk file
  4. Pilih Simpan sebagai jenis pilihan karena Semua File(.)
  5. Tentukan nama file dengan .ekstensi csv
  6. Dari "Encoding" daftar drop-down, pilih UTF-8 pilihan.
  7. Klik Save untuk menyimpan file

Dengan melakukan ini, anda harus mampu mengimpor file csv tanpa menghadapi UnicodeCodeError.

Komentar (0)

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.

Komentar (0)

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(&#39;iso8859-1&#39;)

lihat: https://docs.python.org/3/library/codecs.html#standard-encodings

Komentar (0)