Cara memperbaiki encoding karakter di Python dan pandas

pandas membaca é alih-alih é, berhenti dengan UnicodeDecodeError, atau Excel menampilkan CSV hasil ekspor Anda dengan salah? Di Python, parameter encoding yang menentukan. Berikut kasus-kasus umumnya, dan file rusak bisa Anda perbaiki di browser di atas.

Bisa untuk teks dan file berikut:

  • CSV
  • TXT
  • JSON
  • XML
  • SRT
  • VTT
  • SMI
  • TSV
  • MD
  • HTML
  • SQL
  • LOG

Misalnya ekspor Excel, dump database, subtitle, atau kode situs web.

Perbaiki

  1. Letakkan file atau tempel teks
  2. Langsung diperbaiki otomatis
  3. Salin atau unduh
atau seret file ke sini
  • Tanpa upload. File Anda diperbaiki langsung di browser dan tidak pernah meninggalkan perangkat Anda.

  • Server di Uni Eropa. Mojibuster berjalan di server di Finlandia (Uni Eropa), sehingga berlaku Peraturan Perlindungan Data Umum (GDPR). Baca GDPR (EUR-Lex, dalam bahasa Inggris)

UnicodeDecodeError saat membaca

pd.read_csv mengharapkan UTF-8. Kalau file disimpan dalam Windows-1252 (ANSI), pandas berhenti dengan UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe9; 0xE9 adalah é di Windows-1252. Sebutkan encodingnya:

  • pd.read_csv('data.csv', encoding='cp1252') untuk file dari Excel dan Windows.
  • encoding='latin-1' tidak pernah gagal, tetapi salah membaca € dan tanda kutip tipografis; cp1252 biasanya pilihan yang lebih baik.
  • Kalau tidak tahu encodingnya, seret file ke Mojibuster: encoding dikenali dan file disimpan sebagai UTF-8.

é alih-alih é di DataFrame

Kalau DataFrame menampilkan é, file UTF-8 terbaca sebagai latin-1 atau cp1252, atau datanya memang sudah rusak. Pada kasus pertama, encoding='utf-8' sudah cukup. Kalau datanya sendiri rusak, nilai.encode('cp1252').decode('utf-8') membantu untuk nilai tunggal. Pada data campuran, cara ini gagal begitu ada sel yang sudah benar. Lebih mudah: perbaiki file dengan Mojibuster, lalu baca.

CSV dari pandas yang dibuka di Excel tanpa BOM

Sebelum

nama,kota,omzet
René Müller,Zürich,1250 €
José García,Málaga,980 €

Sesudah

nama,kota,omzet
René Müller,Zürich,1250 €
José García,Málaga,980 €

to_csv: Excel menampilkan file dengan salah

df.to_csv('ekspor.csv') menulis UTF-8 tanpa BOM. Excel membuka file seperti itu sebagai ANSI dan huruf beraksen berubah menjadi é. Dengan encoding='utf-8-sig', pandas menulis BOM dan Excel mengenali UTF-8. Selengkapnya di karakter aneh di Excel.

open() di Windows

open('berkas.txt') tanpa encoding memakai encoding sistem di Windows, biasanya cp1252. Skrip yang jalan di Linux lalu membaca file UTF-8 yang sama sebagai é di Windows. Jadi selalu berikan encoding='utf-8' atau atur variabel lingkungan PYTHONUTF8=1. Lewat PEP 686, UTF-8 memang akan menjadi bawaan di versi Python mendatang.

Data web dengan requests

requests menurunkan response.text dari header Content-Type. Kalau respons teks tidak menyebut charset di sana, ISO-8859-1 diasumsikan dan halaman UTF-8 menampilkan é. Atur dulu response.encoding = 'utf-8', atau pakai response.json() yang mengenali UTF-8 sendiri.

Kalau teks ditulis dengan errors='replace' ke encoding yang tidak punya karakter yang dibutuhkan, file berisi ?: informasinya hilang, lihat tanda tanya pengganti huruf.

Pertanyaan yang sering diajukan

Apakah ada library Python untuk ini?

Ada, ftfy memperbaiki mojibake di kode Python. Untuk file tunggal tanpa pemrograman, Mojibuster lebih cepat dan menunjukkan setiap perubahan sebelum disimpan.

Nilai encoding mana yang paling sering dipakai?

utf-8, utf-8-sig (UTF-8 dengan BOM), cp1252 (Windows, Eropa Barat), latin-1, dan utf-16. Huruf besar-kecil dan tanda hubung tidak berpengaruh.

Apakah pemisah dan angka tetap aman?

Ya. Mojibuster hanya mengubah karakter yang rusak. Koma, tanda kutip, dan baris baru tetap persis seperti semula.

Panduan lainnya