Menyelesaikan masalah UnicodeDecodeError dengan "for line in..." Iterator
Apabila bekerja dengan fail teks, pembangun sering menggunakan iterator seperti "for line dalam..." untuk membaca dan memproses setiap baris fail. Walau bagaimanapun, kadangkala ini boleh menyebabkan UnicodeDecodeError yang mengecewakan.
Masalah:
Pertimbangkan kod berikut:
<code class="python">for line in open('u.item'): # Read each line</code>
Apabila menjalankan kod di atas , anda mungkin menghadapi ralat berikut:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe9 in position 2892: invalid continuation byte
Ralat ini berlaku apabila Python cuba mentafsir bait dalam fail menggunakan pengekodan UTF-8 tetapi menemui bait yang tidak mematuhi piawaian UTF-8 .
Penyelesaian:
Penyelesaian kepada masalah ini terletak pada menentukan pengekodan yang betul untuk fail. Dalam kes ini, fail dikodkan dalam ISO-8859-1, yang merupakan skema pengekodan aksara yang berbeza daripada UTF-8.
Untuk membetulkan ralat, nyatakan pengekodan semasa membuka fail:
<code class="python">for line in open('u.item', encoding='ISO-8859-1'): # Read each line</code>
Dengan menggantikan pengekodan lalai 'utf-8' dengan 'ISO-8859-1', pengekodan aksara yang betul digunakan untuk menyahkod bait dalam fail, menyelesaikan UnicodeDecodeError.
Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan UnicodeDecodeError Apabila Mengulang Melalui Fail Teks?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!