python的編碼問題

看了好幾篇編碼的文章,表示還是理不順。。僅做一些記錄。

一、unicode和utf-8

    unicode記錄了全球的所有語言,包含了跟全球所有國家編碼的映射關係。但是都用unicode來表示編碼太佔空間,就創建了其他的編碼方案,如utf-8。

    utf-8是根據內容來動態分配字節數記錄內容。使用1、2、3、4個字節表示所有字符,優先使用1個字符、無法滿足則使增加一個字節,最多4個字節。英文佔1個字節、歐洲語系佔2個、東亞語系佔3個,其它及特殊字符佔4個。

二、字符的記錄

    要注意:

  1. 無論以什麼編碼在內存裏顯示字符,存到硬盤上都是2進制
  2. 存到硬盤上時是以何種編碼存的,再從硬盤上讀出來時,就必須以何種編碼讀(開頭聲明或轉換),要不然就亂了

三、python中編碼的轉換

python中版本2和3的處理是不一樣的,python3默認編碼是unicode,python2默認編碼是ascii碼。

  • Python3執行過程
  1. 解釋器找到代碼文件,把代碼字符串按文件頭定義的編碼加載到內存,轉成unicode
  2. 把代碼字符串按照語法規則進行解釋
  3. 所有的變量字符都會以unicode編碼聲明
  • python2幾個要點
  1. python2的默認編碼是ascii碼,所以無法支持中文,若文件中有中文,如註釋或處理,必須聲明文件頭編碼,如:#-*- coding:utf-8 -*-
  2. python2可以調用函數實現unicode和utf-8/gbk等中間的轉換,方法爲:
    utf-8/gbk        ---> decode('原始編碼') -->unicode編碼
    unicode編碼  --->encode('編碼類型')   --- >指定編碼
    eg:
    #-*- coding:utf-8 -*-
    
    
    aaa=u"你好"
    
    print aaa
    print aaa.encode("utf-8")
    print aaa.encode("gbk")
    
    print "+++++++++++++++++++++++++"
    
    bbb = "試試看"
    print bbb
    print bbb.decode("utf-8")
    print bbb.decode("utf-8").encode("gbk")
    
    
    

    在windows的輸出結果:

    我的代碼設置爲utf-8編碼,windows的編碼則是gbk
    因爲aaa定義爲unicode編碼,所以能在windows下顯示,轉爲utf-8則亂碼;
    默認的bbb是utf-8編碼,所以要轉爲unicode或gbk才能顯示

  3. string和unicode,是不同類型,無法拼接,若要拼接必須統一類型。

    若在程序中需要處理某個字段,可以用函數type()獲取其是unicode類型還是str類型。
    eg:
    str類型和unicode類型之間的互轉參考上面第2點
    eg:

參考文章:

https://www.cnblogs.com/schut/p/8407258.html

https://blog.csdn.net/jobschen/article/details/79805955

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章