面對UnicodeDecodeError: 'ascii' 編解碼器無法在Python 2.表示嘗試將包含非ASCII 字元的Python 2.x str 轉換為Unicode字串,而不指定原始編碼string.
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 異常:
來源代碼: 使用帶有「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 處理 Unicode 的方式與 Python 2.x 略有不同。常規的 str 現在是 Unicode 字串,舊的 str 現在是位元組。
在 Python 3 中,預設編碼是 UTF-8,因此在不指定編碼的情況下解碼位元組字串使用 UTF-8。此外,open() 預設在文字模式下運行,並傳回解碼後的 str(Unicode 字串)。
以上是如何解決 Python 2.x 中的 UnicodeDecodeError: 'ascii' 編解碼器無法解碼位元組?的詳細內容。更多資訊請關注PHP中文網其他相關文章!