Rumah >pembangunan bahagian belakang >Tutorial Python >Mengapa Python Melemparkan 'UnicodeDecodeError: codec 'ascii' tidak dapat menyahkod bait' dan Bagaimana Saya Boleh Membetulkannya?

Mengapa Python Melemparkan 'UnicodeDecodeError: codec 'ascii' tidak dapat menyahkod bait' dan Bagaimana Saya Boleh Membetulkannya?

Linda Hamilton
Linda Hamiltonasal
2024-12-05 22:26:10995semak imbas

Why Does Python Throw a

Isu Penyahkodan dalam Pengendalian Unikod: Menangani "UnicodeDecodeError: 'ascii' codec can't decode byte"

Pengendalian Unicode Python boleh menjadi punca ralat, terutamanya Pengecualian "UnicodeDecodeError: codec 'ascii' tidak boleh menyahkod bait". Ini berlaku apabila anda cuba menukar Python 2.x str yang mengandungi aksara bukan ASCII kepada rentetan Unikod tanpa menyatakan pengekodan rentetan asal.

Memahami Rentetan Unikod

Rentetan Unicode berbeza daripada rentetan Python biasa dan memegang kod titik Unicode, yang mewakili pelbagai jenis aksara daripada bahasa yang berbeza. Rentetan, sebaliknya, mengandungi teks yang dikodkan dalam pelbagai format (cth., UTF-8, UTF-16). Rentetan dinyahkodkan kepada Unikod, manakala rentetan Unikod dikodkan kepada rentetan.

Corak "Sandwic Unicode"

Input/Penyahkod:

  • Isytihar rentetan Unicode dengan awalan u (cth., u'Zürich').
  • Gunakan pengepala pengekodan dalam kod sumber anda untuk aksara bukan ASCII (cth., # pengekodan: utf-8).
  • Gunakan TextWrapper modul io untuk menyahkod fail dengan pengekodan tertentu (cth., dengan io.open("file.txt", "r", encoding="utf-8") sebagai my_file).

Daging sandwic:

  • Gunakan rentetan Unicode seperti biasa rentetan.

Output:

  • Python cuba mengekod rentetan Unikod kepada pengekodan konsol semasa mencetak.
  • io.open boleh mengekod rentetan Unicode ke rentetan bait untuk menulis kepada fail.

Elakkan sys.setdefaultencoding('utf8')

Godam ini hanya menutup isu Unicode dan mungkin menghalang pemindahan ke Python 3.0, di mana pengekodan lalai ialah UTF-8.

Python 3 Pertimbangan

  • Pengekodan lalai Python 3 ialah UTF-8.
  • Jenis str kini ialah rentetan Unicode, manakala jenis str lama kini ialah bait.
  • open() beroperasi dalam mod teks secara lalai, mengembalikan Unicode yang dinyahkod rentetan.

Atas ialah kandungan terperinci Mengapa Python Melemparkan 'UnicodeDecodeError: codec 'ascii' tidak dapat menyahkod bait' dan Bagaimana Saya Boleh Membetulkannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn