Rumah > Artikel > pembangunan bahagian belakang > Mengapa saya mendapat \"UnicodeDecodeError: \'utf-8\' codec can\'t decode byte 0xff...\" apabila membaca fail dalam Python?
Bagaimana untuk Menyelesaikan "Ralat UnicodeDecodeError: codec 'utf-8' tidak dapat menyahkod bait 0xff dalam kedudukan 0: bait permulaan tidak sah"?
Menghadapi ralat dalam Python ini boleh timbul apabila cuba menukar data tatasusunan bait kepada Rentetan Unicode menggunakan pengekodan utf-8, tetapi urutan bait tidak sah mengikut peraturan utf-8.
Punca utama dalam kes ini ialah Python mentafsir kandungan fail sebagai rentetan berkod utf-8 semasa operasi baca. Walau bagaimanapun, fail itu mungkin mengandungi aksara bukan utf-8, seperti jujukan bait (cth., 0xff) yang bukan bait mula yang sah dalam utf-8.
Untuk menyelesaikan ralat ini, pertimbangkan sifat fail anda dan gunakan penyelesaian berikut:
Penyelesaian:
Sejak fail berkemungkinan fail binari, anda harus memperlakukannya seperti itu. Ubah suai kod bacaan fail untuk menggunakan 'rb' sebagai mod terbuka, seperti yang ditunjukkan di bawah:
<code class="python">with open(path, 'rb') as f: contents = f.read()</code>
Dengan menyatakan 'rb', fail akan dibuka dalam mod binari, mengekalkan bait sebagai bait dan bukannya mentafsirkannya sebagai aksara berkod utf-8. Ini akan menghalang Python daripada cuba menyahkod jujukan bait yang tidak sah dan mengelakkan pengecualian.
Atas ialah kandungan terperinci Mengapa saya mendapat \"UnicodeDecodeError: \'utf-8\' codec can\'t decode byte 0xff...\" apabila membaca fail dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!