Penyebab dan penanggulangan UnicodeDecodeError [Python]
Ketika saya mencoba membaca kumpulan data format file csv dengan panda, saya langsung menemukan kesalahan "UnicodeDecodeError: codec 'utf-8' tidak dapat mendekode byte 0x91 di posisi 1: byte mulai tidak valid", jadi saya menanyakan penyebabnya dan solusi Buat catatan itu.
isi kesalahan
Baca file csv dengan pd.read_csv.Kemudian...
impor panda sebagai pd df = pd.read_csv('data.csv')
>> UnicodeDecodeError: codec 'utf-8' tidak dapat mendekode byte 0x91 di posisi 1: byte awal tidak valid
Terjadi kesalahan decoding Unicode (mengonversi kode karakter menjadi karakter).
Omong-omong, mengubah karakter menjadi kode karakter disebut pengkodean.
Alasan
Di dalam komputer, karakter tidak dikenali sebagaimana adanya, tetapi ditangani sebagai angka (kode karakter) yang ditetapkan ke masing-masing karakter terlebih dahulu.
Ada banyak metode untuk pengkodean karakter, tergantung pada bahasa dan bagaimana angka diberikan. UTF-8 adalah salah satu metode pengkodean untuk Unicode yang telah ditetapkan sebagai standar global yang seragam sehingga dapat digunakan dalam bahasa apa pun.
Yang mengatakan, UTF-8 tampaknya juga tidak sempurna (Wikipedia:Masalah Unicode di lingkungan Jepang)
Saya tidak tahu karakter yang menyebabkan masalah, tetapi file csv berisi karakter Jepang, jadi kesalahan decoding Unicode disebabkan oleh tidak dapat mengkonversi kode karakter Jepang dan UTF-8 dengan baik.
larutan
Saat membaca dengan read_csv(), tentukan format penyandian sebagai kode karakter Jepang (seperti shift_jis) dari argumen.
df = pd.read_csv('data.csv', encoding='shift_jis')
Itu dimuat dengan baik sekarang.
Format Pengkodean lainnya untuk bahasa Jepang
Ngomong-ngomong, ada banyak kode karakter yang bisa mengekspresikan bahasa Jepang, dan Python mengimplementasikan yang berikut ini sebagai standar. ( referensi:Daftar pengkodean standar Python )
- cp932
- euc_jp, euc_jis_2004, euc_jisx0213
- iso2022_jp, iso2022_jp_1, iso2022_jp_2, iso2022_jp_3
- iso2022_jp_2004, iso2022_jp_2ext
- shift_jis, shift_jis_2004, shift_jisx0213
Namun, saya mendapat kesan bahwa itu dapat dibaca dengan baik dengan shift_jis atau cp932, yang sebagian besar adalah mayor.
diskusi
Daftar komentar
cp949 itu bahasa korea ya?
Silakan gunakan cp932.
Mengutip
cp932 | 932, ms932, mskanji, ms-kanji | Jepang
cp949 | 949, ms949, uhc | Korea
Terima kasih atas saran Anda.Tampaknya kolom referensi salah ditulis sebagai cp949.Aku telah memperbaikinya.
Saya minta maaf!terselesaikan!
Itu sangat membantu