Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Menyelesaikan UnicodeDecodeError: codec 'ascii' tidak boleh menyahkod bait dalam Python 2.x?

Bagaimana untuk Menyelesaikan UnicodeDecodeError: codec 'ascii' tidak boleh menyahkod bait dalam Python 2.x?

Barbara Streisand
Barbara Streisandasal
2024-12-21 03:01:091021semak imbas

How to Solve the UnicodeDecodeError: 'ascii' codec can't decode byte in Python 2.x?

UnicodeDecodeError: Codec 'ascii' Can't Decode Byte

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.

Unicode Zen dalam Python 2.x

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'

Gotchas

Walaupun tanpa panggilan unicode() yang jelas, penukaran daripada str kepada Unicode boleh berlaku. Situasi berikut boleh mencetuskan pengecualian UnicodeDecodeError:

  • Penukaran eksplisit tanpa pengekodan: unicode('€')
  • Menggunakan rentetan format gaya baharu dengan rentetan Unicode: u"Mata wangnya ialah: { }".format('€')
  • Menggunakan rentetan format gaya lama dengan rentetan Unicode: u'The mata wang ialah: %s' % '€'
  • Melampirkan rentetan pada Unikod: u'Mata wangnya ialah: ' '€'

Input dan Penyahkodan

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

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!

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