浅谈Python中的编码规则
注:本人用Python3.4作為學習版本,以下學習心得只適用于Python3.4。
之前拜讀了金角大王Alex關于編碼的解答,收獲頗多。特此致謝,以下僅談一談作為一個初學者,對編碼的理解。
我所了解的編碼,大致分為兩類:第一類是支持中文的編碼集;第二類是支持英文的編碼集。至于別國的編碼集,暫且不做討論。
常見編碼:ASCII;Unicode;UTF-8;big5,;GB2312;GBK;GB18030
接下來,我對以上編碼進行分類:
只支持英文和特殊字符的編碼:ASCII
ASCII是基于拉丁字母的一套電腦編碼系統,主要用于顯示現代英語和其他西歐語言,用8位來表示1個字節,也就是表示一個英文需要8位二進制數。
只支持中文和特殊字符的編碼:big5,;GB2312;GBK;GB18030
big5是用來存儲繁體中文的編碼集,而GB2312;GBK;GB18030都是用來存儲簡體中文的編碼集
GB2312;GBK;GB18030所支持的漢字數量依次遞增,都采用2個字節來表示一個漢字或者特殊符號,也就是用這三個編碼集表示中文字符,需要16位二進制數。
其中需要說明的是,目前中文版windows編碼集采用GBK
支持中文,英文和特殊字符的編碼:Unicode;UTF-8
Unicode既可以編碼中文,也可以編碼英文。采用2個字節來表示,也就是說表示一個字符需要16位二進制數。
UTF-8可以簡單理解為Unicode的升級版。當表示英文時,用1個字節來表示,表示一個字符需要8位二進制數;當表示中文時,用3個字節來表示,表示一個字符需要24位二進制數。
簡單了解常用編碼集后,我們在Python3.4中可以實現各編碼集之間的轉換,其中需要說明的是Python3.4默認使用UTF-8編碼集(為什么看網上資料說是Unicode???)。
以下是驗證程序:
# Author: Lucas import sys print(sys.getdefaultencoding())程序運行結果:
utf-8Process finished with exit code 0當在Python中進行編碼轉換時,當字符編碼不是Unicode時,我們都需要將字符先通過decode解碼為Unicode,然后再進行encode編碼,得到所期望的編碼。
需要注意的是,decode時,我們需要告訴計算機,我們要把何種編碼轉換為Unicode。例如,你想要將UTF-8的編碼轉換為Unicode,寫法如下:
decode(“UTF-8”)接下來我們進行編碼轉化驗證:
# Author: Lucas #將test轉換為gbk編碼 import sys print(sys.getdefaultencoding()) s="你" s_to_unicode=s.decode("utf-8")這就尷尬了,程序報錯:
s_to_unicode=s.decode("utf-8") AttributeError: 'str' object has no attribute 'decode' utf-8由此猜想,網上說的Python默認編碼應該指的是當Python解釋器來運行程序時,采用Unicode編碼運行,而程序保存格式應該為UTF-8。
接下來按照假設將test編碼轉為gbk:
# Author: Lucas #將test轉換為gbk編碼 import sys print(sys.getdefaultencoding()) test="你" test_to_gbk=test.encode("gbk") print(test_to_gbk)運行結果如下:
utf-8 b'\xc4\xe3'Process finished with exit code 0可以看出,Python3在運行程序時,默認編碼格式確實是Unicode,我們成功將test轉換成gbk編碼,可以看出test在gbk編碼中占用2個字節,16位二進制數,分別是c4,e3
接下來我們將test轉成utf-8,這就需要經歷解碼和編碼的過程。程序如下:
# Author: Lucas #將test轉換為gbk編碼 import sys print(sys.getdefaultencoding()) test="你" test_to_gbk=test.encode("gbk") print(test_to_gbk) test_to_gbk_utf8 =test_to_gbk.decode("gbk").encode("utf-8") print(test_to_gbk_utf8)程序運行如下:
utf-8 b'\xc4\xe3' b'\xe4\xbd\xa0'Process finished with exit code 0可以看出成功將test轉成了utf-8編碼,其中test占用3個字節,24位二進制數,分別為e4,bd,a0。
至此,我們基本熟悉了Python環境下的編碼轉化規則,其余編碼操作流程都是一樣的。
總結:
當進行編碼轉換時,我們需要知道當前版本python解釋器在運行程序時默認的編碼格式。在此基礎上,當我們進行編碼轉換時,牢記:Unicode編碼是中間編碼,其他編碼之間相互轉換時,需要先將其解碼(decode)為Unicode,然后再編碼(encode)成對應編碼。Unicode時刻放在心中,我們在編碼轉換時就會游刃有余。
?
?
?
?
轉載于:https://www.cnblogs.com/lucas0625/p/7569822.html
總結
以上是生活随笔為你收集整理的浅谈Python中的编码规则的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 背水一战 Windows 10 (30)
- 下一篇: 软件工程实践2017结对作业