最近一直在看廖雪峯老師的python網上教程,python內容簡單易理解,就沒整理,可是字符串編碼做爲一直困擾本身的問題,看了幾遍文章,最終仍是將其整理以下,本篇博客總結自廖雪峯老師的網上教程:http://www.liaoxuefeng.com/python
首先咱們要明確三者出現的時間依次是:ASCII,Unicode,utf-8,那麼爲何這樣的順序出現,就是咱們記住這些編碼必需要知道的。程序員
計算機是美國人發明的,而英文中只有127個字母,也就是咱們常說的ASCII碼錶示的,所以8位二進制足以表示,所以就出現了ASCII碼錶示;web
可是,隨着計算機的發展,計算機須要可以表示更多的語言,例如中文、韓文、日文等,中文幾萬個字,ASCII碼確定表示不了了,況且還有韓文、日文,所以這些國家又都用本身的語言表示方法,例如GB2312
、Shift_JIS
、Euc-kr
等,這樣問題原本應該能解決編碼的問題的,一個國家語言只要使用一種編碼方式就好了。可是問題在於每一個國家都有本身的標準,所以編碼在不一樣語言之間就會出現衝突,所以急需一種統一的編碼,可以表示「全部」國家的語言(實際上是諸多國家,並不必定全部,少衆語言可能還不能表示),Unicode編碼營運而生。編程
然而Unicode編碼大一統的表示全部語言,Unicode標準也在不斷髮展,但最經常使用的是用兩個字節表示一個字符(若是要用到很是偏僻的字符,就須要4個字節)。現代操做系統和大多數編程語言都直接支持Unicode。然而天然想到Unicode相對於ASCII碼錶示的效率很低,由於ASCII碼錶示一個字符1個字節,而Unicode須要2個,而且世界上絕大多數的語言都是基於英文的,那麼如何才能既能表示全部的語言,又能節省表示空間呢,這樣utf-8變長編碼就出現了。網絡
utf-8採用變長編碼,英文字母符號採用1字節編碼,漢字一般3個字節,生僻字也有4-6字節的,這樣子既統一了語言表達,又提升了效率。可見ACSII碼實際上是utf-8的子集。編程語言
問題到這貌似解決了,可是計算機怎麼知道你經過哪一種語言表示呢,也就是計算機系統如何表示字符編碼呢:編碼
計算機硬盤等存儲的是utf-8節省存儲空間,計算機內存存儲的是Unicode,所以讀寫的時候會出現編碼轉換;spa
網絡傳輸同樣,網絡傳輸使用utf-8編碼節省通訊開銷,計算機內存中存儲的是Unicode,所以讀寫的時候也會出現編碼轉換。操作系統
----------------------------------------------------------------------code
程序員A:借我1000元吧。
程序員B:給你湊個整數,1024元吧