我們都知道python是一門世界通用的程式語言,如果它的源**檔案中出現的都是ascii支援的字元,那python會以ascii編碼的格式處理程式。不過,一旦源**中出現了ascii不支援的字元,它該怎麼辦?我用一張圖來回答你吧
也就是說,所有超出ascii範圍的字元的處理工作,無論在輸入之前,或者輸出之後是什麼編碼格式的,它們在python的執行記憶體中,都被統一轉換(decode)為unicode格式來進行程式處理。
encode和decode
從unicode型別到gbk或utf-8等編碼的轉換,叫做編碼(encode);而這一過程的逆過程,則叫做解碼(decode)。上圖也表示了這個過程
字串在python內部的表示是unicode編碼。因此在做編碼轉換時,通常需要以unicode作為中間編碼,即先將其他編碼的字串解碼(decode)成unicode,再從unicode編碼(encode)成另一種編碼。
decode的作用是將其他編碼的字串轉換成unicode編碼,如str1.decode(『gb2312』),表示將gb2312編碼的字串str1轉換成unicode編碼;
encode的作用是將unicode編碼轉換成其他編碼的字串,如str2.encode(『gb2312』),表示將unicode編碼的字串str2轉換成gb2312編碼 因此,轉碼的時候一定要先搞明白,字串str是什麼編碼,然後decode成unicode,然後再encode成其他編碼。
遇到亂碼問題,按上述思路分析一遍,再將亂碼所在字串按它的原始編碼decode成unicode型別的,再使用unicode型別的編碼進行輸入、輸出即可解決亂碼問題。
參考內容:
關於python的編碼、亂碼以及unicode的一些研究
python3字串編碼總結-str(unicode)_bytes
python2和3的字串編碼差別
關於python中的編碼問題
字串的編碼,有很多種如utf 8,gb2312,gbk,gb18030,bz2,zlib,big5,bzse64 python 對編碼的處理有兩個方法,decode 和 encode 方法 1 2 3 4 a 你好 b python printa.decode utf 8 encode gbk de...
關於python 遇到的幾個編碼問題
初遇編碼也是一臉懵逼,雖然現在還是不是很懂。decode和encode encod把unicode或字元轉成 utf gbk 之類的,decode可以把用 utf 8 或者 gbk 編碼的字元解碼成unicode,前提是你知道原字元用的哪一種編碼方式。如果不這樣的話,字元就會亂 比如 對字串 你好 ...
關於Python3的中文編碼問題
在做切詞實驗的時候,用jieba模組,相信很多人都已經熟悉。但是中文切詞的編碼問題的困擾你遇到了嗎?python3中的decode常常報錯,windows作業系統環境下,jieba切詞預設時gbk編碼。這裡,要注意,在輸入和輸出檔案開啟時用codecs去開啟,說明是utf 8編碼,一切問題就解決了 ...