Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Menyelesaikan UnicodeDecodeError: codec 'ascii' tidak boleh menyahkod bait dalam Python 2.x?
Menghadapi UnicodeDecodeError: Codec 'ascii' tidak dapat menyahkod bait dalam Python 2.x menunjukkan percubaan untuk menukar Python 2.x str yang mengandungi aksara bukan ASCII kepada rentetan Unicode tanpa menyatakan pengekodan rentetan asal.
Rentetan Unicode, berbeza daripada rentetan, memegang kod titik Unicode dan boleh mewakili mana-mana titik Unikod merentas spektrum. Rentetan, sebaliknya, mengandungi teks yang dikodkan seperti UTF-8, UTF-16 atau ISO-8895-1. Rentetan dinyahkodkan kepada Unicode dan sebaliknya. Fail dan data teks sentiasa dipindahkan dalam rentetan yang dikodkan.
Modul Markdown menggunakan unicode() untuk mengesahkan rentetan masuk, memastikan rentetan itu sama ada ASCII atau rentetan Unikod yang dibalut semula. Memandangkan pengarang Markdown tidak dapat menentukan pengekodan rentetan masuk, mereka bergantung kepada pengguna untuk menyahkod rentetan ke dalam Unikod sebelum meneruskannya.
Rentetan Unikod boleh diisytiharkan dalam kod menggunakan awalan 'u' sebelum rentetan. Contohnya:
my_u = u'my ünicôdé strįng'
Walaupun tanpa panggilan unicode() yang jelas, penukaran daripada str kepada Unicode boleh berlaku. Situasi berikut boleh mencetuskan pengecualian UnicodeDecodeError:
Kod Sumber: Aksara bukan ASCII boleh disertakan dalam kod sumber menggunakan rentetan Unicode dengan 'u' awalan. Untuk membolehkan Python menyahkod kod sumber dengan betul, pengepala pengekodan yang betul mesti disertakan. Untuk fail UTF-8, gunakan:
# encoding: utf-8
Fail: Gunakan io.open dengan pengekodan yang betul untuk menyahkod fail dengan cepat. Contohnya, untuk fail UTF-8:
import io with io.open("my_utf8_file.txt", "r", encoding="utf-8") as my_file: my_unicode_string = my_file.read()
Pangkalan Data: Konfigurasikan pangkalan data untuk mengembalikan rentetan Unicode dan gunakan rentetan Unicode untuk pertanyaan SQL.
HTTP: Halaman web boleh mempunyai pengekodan yang berbeza-beza. Python-Requests mengembalikan Unicode sebagai response.text.
Secara manual: Nyahkod rentetan secara manual menggunakan my_string.decode(encoding), dengan pengekodan adalah pengekodan yang sesuai.
Python 3 mengendalikan Unicode sedikit berbeza daripada Python 2.x. str biasa kini ialah rentetan Unicode, dan str lama kini ialah bait.
Dalam Python 3, pengekodan lalai ialah UTF-8, jadi menyahkod rentetan bait tanpa menyatakan pengekodan menggunakan UTF-8. Selain itu, open() beroperasi dalam mod teks secara lalai, mengembalikan str yang dinyahkod (rentetan Unicode).
Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan UnicodeDecodeError: codec 'ascii' tidak boleh menyahkod bait dalam Python 2.x?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!