1. 程式人生 > >python蛋疼的編碼decode、encode、unicode、str、byte的問題都在這了

python蛋疼的編碼decode、encode、unicode、str、byte的問題都在這了

機器 .com mage byte 一個 blog 字符 同時 nbsp

  相信很多人和我一樣,被python蛋疼的編碼問題糾纏不清,比如下面的

技術分享

  私以為出現這種錯誤的原因還是對一些基本的編解碼概念不夠熟悉,下面就說說我的理解:

  首先python剛出來的時候unicode還沒有一統江湖,期間很多代碼和程序壓根就是直接用ascii編碼,反正代碼都是英文寫的,而且當時那個年代寫代碼一般都是說英文的,那就無所謂啦,人家用的爽才不care那麽多,後來互聯網開始興起,全球各個地方的人都需要了,中國這邊的話自己搞了套gbk(gb2312)編碼,同時該編碼包含了ascii,畢竟ascii就那麽1個byte8bit的編碼,隨便都能包含進去了,後來unicode一統江湖後,才算解決了編碼問題,但是很多應用軟件和編程語言誕生年代久遠,所以遺留了一些編碼問題,這也就是為什麽python、mysql等等常出現編碼問題的原因了。

  python2中默認不指定的情況下使用的編碼是ascii編碼!!!

  首先 “str” 本質上是字符串,用print直接打印出來人類可讀,byte本質是字節,用8位0和1的序列來表示的,為機器可讀。

技術分享

由於python2默認的encoding是ascii 所以很明顯,當一個中文的unicode想encode的時候就會出現中文無法用ascii編碼的的錯誤,畢竟ascii只是unicode的一個子集。

反之也是

python蛋疼的編碼decode、encode、unicode、str、byte的問題都在這了