首頁 >後端開發 >Python教學 >如何解決 Python 2.x 中的 UnicodeDecodeError: 'ascii' 編解碼器無法解碼位元組?

如何解決 Python 2.x 中的 UnicodeDecodeError: 'ascii' 編解碼器無法解碼位元組?

Barbara Streisand
Barbara Streisand原創
2024-12-21 03:01:091015瀏覽

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

UnicodeDecodeError: 'ascii' 編解碼器無法解碼字節

面對UnicodeDecodeError: 'ascii' 編解碼器無法在Python 2.表示嘗試將包含非ASCII 字元的Python 2.x str 轉換為Unicode字串,而不指定原始編碼string.

Python 2.x 中的Unicode Zen

Unicode 字串與字串不同,它保存Unicode 點程式碼,並且可以表示整個範圍內的任何Unicode 點。另一方面,字串包含編碼文本,例如 UTF-8、UTF-16 或 ISO-8895-1。字串被解碼為 Unicode,反之亦然。文件和文字資料始終以編碼字串形式傳輸。

Markdown 模組使用 unicode() 來驗證傳入的字串,確保它們是 ASCII 或重新包裝的 Unicode 字串。由於 Markdown 作者無法確定傳入字串的編碼,因此他們依賴使用者在傳遞字串之前將其解碼為 Unicode。

可以在程式碼中使用 'u' 前綴在程式碼中宣告 Unicode 字串。細繩。例如:

my_u = u'my ünicôdé strįng'

陷阱

即使沒有明確的 unicode() 調用,也可能發生從 str 到 Unicode 的轉換。以下情況會觸發UnicodeDecodeError 異常:

  • 不編碼的明確轉換:unicode('€')
  • 對Unicode 字串使用新樣式格式字串:u"貨幣為:{ }".format('€')
  • 使用帶有Unicode 字串的舊樣式格式字串:u'貨幣是: %s' % '€'
  • 將字串附加到Unicode:u'貨幣為:' '€'

輸入和解碼

來源代碼: 使用帶有「u」前綴的Unicode 字串可以將非ASCII 字元包含在原始碼中。為了使Python能夠正確解碼原始碼,必須包含正確的編碼標頭。對於 UTF-8 文件,請使用:

# encoding: utf-8

文件: 使用 io.open 和正確的編碼來動態解碼文件。例如,對於 UTF-8 檔案:

import io
with io.open("my_utf8_file.txt", "r", encoding="utf-8") as my_file:
  my_unicode_string = my_file.read()

資料庫: 設定資料庫以傳回 Unicode 字串並使用 Unicode 字串進行 SQL 查詢。

HTTP: 網頁可以有不同的編碼。 Python-Requests 在response.text中傳回Unicode。

手動:使用 my_string.decode(encoding) 手動解碼字串,其中encoding是適當的編碼。

Python 3

Python 3 處理 Unicode 的方式與 Python 2.x 略有不同。常規的 str 現在是 Unicode 字串,舊的 str 現在是位元組。

在 Python 3 中,預設編碼是 UTF-8,因此在不指定編碼的情況下解碼位元組字串使用 UTF-8。此外,open() 預設在文字模式下運行,並傳回解碼後的 str(Unicode 字串)。

以上是如何解決 Python 2.x 中的 UnicodeDecodeError: 'ascii' 編解碼器無法解碼位元組?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn