Rumah > pembangunan bahagian belakang > Tutorial Python > Mengapa Saya Mendapat Ralat 'UnicodeDecodeError: 'ascii' codec can't decode byte' dalam Python 2.x dan Bagaimana Saya Boleh Membetulkannya?

Mengapa Saya Mendapat Ralat 'UnicodeDecodeError: 'ascii' codec can't decode byte' dalam Python 2.x dan Bagaimana Saya Boleh Membetulkannya?

Barbara Streisand
Lepaskan: 2025-01-01 05:39:11
asal
377 orang telah melayarinya

Why Do I Get the

UnicodeDecodeError: Codec 'ascii' Tidak Dapat Menyahkod Bait

Masalahnya

Apabila cuba menukar rentetan Python 2.x yang mengandungi bukan- aksara ASCII kepada rentetan Unicode, anda mungkin menemui "UnicodeDecodeError: codec 'ascii' tidak boleh ralat decode byte". Ini berlaku kerana tingkah laku lalai adalah untuk menganggap pengekodan ASCII, yang tidak boleh mengendalikan aksara bukan ASCII.

Pembetulan Pantas

  • Pastikan anda menyahkod rentetan kepada rentetan Unikod secara eksplisit.
  • Jangan anggap rentetan ialah UTF-8 dikodkan.
  • Tukar rentetan kepada rentetan Unikod seawal mungkin dalam kod.
  • Pertimbangkan untuk membetulkan tempat anda untuk pengendalian Unikod yang lebih baik.
  • Elakkan penggodam muat semula pantas.

Memahami Unicode dalam Python 2.x

Rentetan Unicode tidak mempunyai pengekodan dan memegang kod titik Unikod, manakala rentetan mengandungi teks yang dikodkan (cth., UTF-8, UTF-16). Penggunaan modul Markdown bagi unicode() sebagai get kualiti memastikan rentetan masuk ialah rentetan Unicode.

Gotchas dan Contoh

  • Penukaran eksplisit tanpa pengekodan: unicode('€')
  • Rentetan format gaya baharu ke dalam rentetan Unikod: u"Mata wangnya ialah: {}".format('€')
  • Rentetan format gaya lama ke dalam rentetan Unikod: u'Mata wang ialah: %s' % '€'
  • Tambah rentetan pada Unikod: u' Mata wangnya ialah: ' '€'

Sandwic Unicode

Tubuhkan "Sandwic Unicode" dalam kod anda: menyahkod data input kepada Unicode, berfungsi dengan rentetan Unicode dan mengekod kepada rentetan pada output. Ini mengelakkan kebimbangan pengekodan di tengah-tengah kod.

Input dan Penyahkodan

  • Tentukan rentetan Unicode dalam kod sumber dengan awalan 'u' (cth., u'Zürich').
  • Tetapkan pengepala pengekodan yang betul untuk kod sumber yang mengandungi aksara bukan ASCII (cth., # pengekodan: utf-8).
  • Gunakan io.open dengan pengekodan yang sesuai untuk input fail teks.
  • Gunakan backports.csv untuk mengendalikan fail CSV bukan ASCII.
  • Konfigurasikan pangkalan data untuk mengembalikan data Unicode.
  • Nyahkod kandungan HTTP secara manual berdasarkan pengepala jenis Kandungan charset.

Output

  • print() cuba untuk mengekod Unicode kepada pengekodan konsol.
  • pengekodan stdout boleh dipaksa dengan pembolehubah persekitaran PYTHONIOENCODING.
  • Gunakan io.open untuk mengekod Unikod kepada bait rentetan untuk output fail.

Perbezaan Python 3

  • Str Python 3 ialah rentetan Unikod.
  • Pengekodan lalai ialah UTF-8.
  • open() beroperasi dalam mod teks secara lalai, mengembalikan str yang dinyahkod (Unicode).

Atas ialah kandungan terperinci Mengapa Saya Mendapat Ralat 'UnicodeDecodeError: 'ascii' codec can't decode byte' dalam Python 2.x dan Bagaimana Saya Boleh Membetulkannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan