[Python] ‘ascii’ codec can’t decode byte




這是在 Stackoverflow 上面看到討論,覺得可以讓 encode/decode 的觀念更清楚。

底下的程式碼為什麼會出現錯誤?

一般來說,我們會做動作是:

  • 對 str 執行 decode() 把他轉成 unicode。decode() 的引數為原本字串的 encoding 方式。
  • 或者是對 unicode 執行 encode 把他轉成 str。encode() 的引數為欲轉換的 encoding 方式。

當我們針對 str 呼叫 encode() 方法時,編譯器會隱含式的呼叫一個 decode() 方法(預設的 encoding 是 ascii),先將 str 轉成 unicode,再進一步 encode 成想要的 encoding。
當我們針對 unicode 呼叫 decode() 方法時,編譯器會隱含式的呼叫一個 encode() 方法(預設的 encoding 也是 ascii),先將 unicode 轉成 str,再進一步 decode 成想要的 encoding。

上面的例子裡面,因為「你好」被使用引號(“)包住(而不是u”你好”這樣的 unicode 字串),所以系統會以為他是一個 str。

所以上面的程式碼,會隱含式的被轉成下面這樣:

因為”你好”並不是 ascii code,但是 decode 時的 encoding 使用的是預設的 ascii,所以執行的時候會出錯。

參考資料:




Be the first to comment

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.