TLDR? Mencoba:file = open(filename, encoding='cp437)
Mengapa? Saat digunakan:
file = open(filename)
text = file.read()
Python menganggap file tersebut menggunakan codepage yang sama dengan lingkungan saat ini (cp1252 jika ada tulisan pembuka) dan mencoba mendekodekannya ke default UTF-8. Jika file berisi karakter nilai yang tidak didefinisikan dalam codepage ini (seperti 0x90), kami mendapatkan UnicodeDecodeError. Terkadang kita tidak tahu penyandian file, terkadang penyandian file mungkin tidak ditangani oleh Python (seperti misalnya cp790), kadang-kadang file tersebut dapat berisi penyandian campuran.
Jika karakter tersebut tidak dibutuhkan, seseorang dapat memutuskan untuk menggantinya dengan tanda tanya, dengan:
file = open(filename, errors='replace')
Solusi lain adalah menggunakan:
file = open(filename, errors='ignore')
Karakter kemudian dibiarkan utuh, tetapi kesalahan lainnya akan ditutup juga.
Solusi yang cukup baik adalah dengan menentukan pengkodean, namun bukan pengkodean apa pun (seperti cp1252), tetapi yang memiliki SEMUA karakter yang ditentukan (seperti cp437):
file = open(filename, encoding='cp437')
Codepage 437 adalah penyandian DOS asli. Semua kode didefinisikan, sehingga tidak ada kesalahan saat membaca file, tidak ada kesalahan yang ditutup-tutupi, karakter dipertahankan (tidak cukup dibiarkan utuh tetapi masih dapat dibedakan).