計算機能識別的只有1和0,也就是二進制,而1和0可以表達出全世界的所有文字和語言符號。
我們人類采用的是十進制算術法,主要原因是因為我們有10個手指頭。如果我們只有2個手指頭的話,我們就會用二進制計數,就會逢二進一,那可能是這樣計數的:1,10,11,20,21,30,31,40。。。。。。其中1代表十進制中的1,10代表10進制中的2,11代表十進制中的3,20代表10進制中的4。。。。。。不過這樣太麻煩了,我們可以用純2進制表達,因為是逢二進一,所以除第一位外,每一位肯定是前一位的兩倍。 比如1在二進制中還是用1表示;2在二進制中用10表示,其中1是2的一次方;3在二進制中用11表示;4用100表示,5用101表示。。。。。。從第一位開始的數字(1或0)乘以2的0次方,然后依次是乘以2的1次方,2次方,3次方直到無限大,得出的數就是十進制。所以,雖然電腦只認識0和1,但是可以表達任何數字。
那如何表達文字和符號呢?這就涉及到字符編碼了,字符編碼強行將每一個字符對應一個十進制數字,再將十進制數字轉換成計算機理解的二進制,而計算機讀到這些1和0之后就會顯示出對應的文字或符號。下面是ASCII(美國信息交換標准代碼)

可以看到,255個就夠用了,因為美國是用字母的,那么如何讓計算機去斷字呢?要知道,計算機讀的一堆二進制數字是沒有空格的。解決辦法是用8個二進制代表一個字母或符號,因為8個二進制可以表達的最大數是255,正好用8個二進制就能表示了,那干脆所有的都用二進制表示吧。
那你老美的編碼問題解決了,我們中國呢?中國文化博大精深,我們可以有上萬個漢字呢。於是我們於1980年推出了自己的GB2312編碼,支持常用的漢字。后來又相繼推出了 GBK1.0和 GB18030,簡單說后來推出的就是支持更多的漢字,而且支持少數民族文字和日韓里面的所有漢字。其他國家也紛紛推出了自己國家的字符編碼。那么問題來了,如果把一個國家出的軟件,裝到另一個國家的操作系統里面,由於編碼不同,就會出現一些亂七八糟的東西,簡稱亂碼。
為了解決這個問題,ISO(國際標准化組織)於推出了Unicode,也就是萬國碼。在萬國碼中,每個字符用16個二進制來表示。按理說,這個問題為完美解決了,但是老美不干了,我們以前用8個二進制就能表示的,你現在讓我們用16個二進制來表示,那不是白白浪費空間嗎。為了安撫老美,utf-8誕生了。 UTF-8,是對Unicode編碼的壓縮和優化,簡單說就是對ASCII碼的內容用1字節保存,歐洲的字符用2個字節保存,東亞的字符用3個字節保存. 現在世界上使用最廣泛的編碼。不過這樣咱們吃虧了啊,咱們以前是用2個字節的。
在操作系統方面windows中文版默認是用GBK編碼,Mac OX和linux是用utf-8
python2默認是用ASCII編碼,不過到了python3默認就用utf-8了。不過python2可以在代碼的第一行加上如下聲明,這樣就會用utf-8去解碼了。
#! -*- coding: utf-8 -*- #!encoding :utf-8
