python基礎一 ------Python 的編碼

來源:互聯網
上載者:User

標籤:bit   長度   文本   類型   utf8   文字檔   png   節能   儲存   

首先瞭解一下曆史,但是本篇文章冗雜,如老太太裹腳布----------又臭又長

編碼曆史:    

    1. 電腦只能處理數字,文字檔只有轉換為數字
    才能處理。8bit==1位元組 所以一個位元組能表示的最大的數就是255
    
    2. 美國人發明電腦。用英語,所有一個位元組就表示了所有字元
    就是ASCII(一個位元組) 編碼就是美國人的標準編碼
    
    3. 當中國人使用電腦時,需要表示中文字元,於是就發明了
    GB2312的編碼格式,即用兩個位元組表示一個漢字。同理,其他語言國家
    也就建立了自己相應的編碼。沒有一個共同的標準,於是當不同語言用
    了不對應的編碼就會產生亂碼

    4.為統一標準,Unicode 編碼出現了,所有語言統一到一套編碼
        Unicode與ASCII 編碼比較
            1)  字母A: ASCII 十進位65,二進位就是 0100 0001
                漢字中 ASCII表示不了 採用Unicode編碼為20013 二進位:01001110 00101101
            2)  為電腦識別統一長度,所以A 前面位置補0 即 00000000 0100 0001
        標準就此統一
    5. 標準統一了,亂碼問題解決了,但是Unicode編碼長度較長,但電腦英文為主,
    若內容若全是英文,Unicode編碼就比ASCII編碼多一倍儲存空間,同時傳輸也多一倍
    怎麼解決呢?
    
    6.要是Unicode 編碼可以變化就好了,於是UTF-8 出現了
    utf-8 中,字母一個位元組,一個漢字3個位元組,特別生僻的4-6個
    於是節約了空間和儲存

    7,那麼問題來了:電腦只認Unicode 編碼
    utf-8 之間怎樣轉換的
    

 





    當需要被電腦識別時,就會載入到記憶體,此時採用的編碼就必須是Unicode 編碼
    當需要在網路中傳輸時,或者儲存在檔案中時,就採用UTF-8編碼,為了節約空間成本
    所以就有了相互轉化

python2 和python3 在Windows/Linux 上的編碼轉換    python2:          在Windows:            

    1. 先來看看window 本身是什麼編碼
                import sys
                sys.getdefaultencoding()
                #out: "utf-8"
            2.    字串全部英文
                s1= "abc" -->  type(s1):str
                s2 = u"abc" --> type(s2):Unicode
                    u""的意義:表示將後面的字串以unicode格式儲存
                s1.encode("utf8")  成功
                s2.encode("utf8")  成功

            3.  當出現中文時:
                s1 = "你好"    --> GB2312編碼。windows下
                s2 = u"你好"
                s1.encode("utf8")  報錯
                s2.encode("utf8")  成功
                
                報錯原因:
                    在記憶體中是以Unicode 進行編碼的,但是
                s1 在傳遞過來時就是不是Unicode編碼了(原因是儲存浪費),而
                encode是將一個Unicode 對象轉化為參數中的編碼格式進行編碼
                所以說 s2不會報錯
                
                解決辦法:
                    先將這個gb2312的編碼轉化為unicode編碼的對象
                然後再轉化為utf-8
                    s1.decode("gb2312").ecode("utf8")  成功  Windows下為"gb2312"
                    decode("xx")方法是將一個編碼為"xx"的對象轉化
                為Unicode對象        

  在Linux下:            

    1. 先來看看linux 本身是什麼編碼
                import sys
                sys.getdefaultencoding()
                #out: "ascii"            
            2.    字串全部英文
                s1= "abc" -->  type(s1):str
                s2 = u"abc" --> type(s2):Unicode
                    u""的意義:表示將後面的字串以unicode格式儲存
                s1.encode("utf8")  成功
                s2.encode("utf8")  成功
            3.  當出現中文時:
                s1 = "你好"    --> utf-8編碼。Linux下 為啥不是ascii? 那ascii能表示中文嗎?
            肯定是轉化為了utf-8 了啊
                s2 = u"你好"
                s1.encode("utf8")  報錯
                s2.encode("utf8")  成功
            解決辦法:
                    先將這個utf-8的編碼轉化為unicode編碼的對象
                然後再轉化為utf-8
                    s1.decode("utf8").ecode("utf8")  成功  Linux下中文為"utf-8"
                等價於 s1 又轉回去了,本身就是utf-8編碼

python 3:      

  在python3 中,所有的str類型的都是Unicode 格式編碼,可以直接encode為"utf-8"
        
        在Windows:
            1.    字串全部英文
                s1= "abc" -->  type(s1):str
                s2 = u"abc" --> type(s2):Unicode
                    u""的意義:表示將後面的字串以unicode格式儲存
                s1.encode("utf8")  成功
                s2.encode("utf8")  成功
            2.  當出現中文時:
                s1 = "你好"    --> Unicode編碼。windows下
                s2 = u"你好"    ---> 沒有必要這樣寫 ,不加u"",3也認為這就是Unicode
                s1.encode("utf8")  成功
                s2.encode("utf8")  成功  
        在Linux下: 跟在window 下一樣      

 總結:    談談 #-*-coding:UTF-8 -*-                

  python2與3 最大的區別:
                2 中當檔案有中文出現時就必須在開頭加上,而且漢字字串必須加u""
            作用:
                  告知python 這個檔案是按照utf-8格式編碼的python就會按照這個編碼進行解讀,
                然後在內部進行Unicode轉換
            為什麼3中不用寫:
                  3中Python都會將檔案以Unicode進行解讀
3

 



python基礎一 ------Python 的編碼

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.